表恢复问题

时间:2010-10-07 23:22:19

标签: mysql sql

假设我有一个包含以下模式的表:

  

tableId
field1
field2
.....

我有两个数据库副本(备份和生产)。在生产实例上,意外运行了一个查询,执行以下操作:

Update table set field2 = null where field1 = 'x';

我正在尝试根据存储在备份实例中的数据(未运行错误的更新语句)来撤消此查询。

我需要在备份数据库上运行哪些SQL语句来检索tableId和field2的值?我如何将其转换为适当的更新语句来修复生产?可能会有很多行受到查询的影响。

我认为我可以使用以下查询从备份中选择已删除的值:

Select tableId, field2 where field1 = 'x';

但是,我对如何将其转换为简单的更新语句感到茫然。任何见解(或更好的想法)将不胜感激。

1 个答案:

答案 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