假设我有一个包含以下模式的表:
tableId
field1
field2
.....
我有两个数据库副本(备份和生产)。在生产实例上,意外运行了一个查询,执行以下操作:
Update table set field2 = null where field1 = 'x';
我正在尝试根据存储在备份实例中的数据(未运行错误的更新语句)来撤消此查询。
我需要在备份数据库上运行哪些SQL语句来检索tableId和field2的值?我如何将其转换为适当的更新语句来修复生产?可能会有很多行受到查询的影响。
我认为我可以使用以下查询从备份中选择已删除的值:
Select tableId, field2 where field1 = 'x';
但是,我对如何将其转换为简单的更新语句感到茫然。任何见解(或更好的想法)将不胜感激。
答案 0 :(得分:0)
您需要在同一个数据库中更新数据,因此当您这样做时,从备份中选择field1 ='x',将其保存到临时表并将其复制到生产表。
你还需要在这两个表之间使用某种主键 - 如果你没有,你怎么知道哪个field2需要更新?
例如,如果你的表有
field1 field2
x 5
x 9
x null
y 5
现在已经
了field1 field2
x null
x null
x null
y 5
如果还有其他字段,您将如何区分x / 9的正确记录x / 5,更重要的是,从更新前的null2字段2中区分出来?
如果你有某种主键,那么你可以将table1(field2)作为selecttable2从backuptable更新,其中table1.field1 = backuptable