0

我正在开发一个程序,该程序应该在每次运行时向数据库插入数百行。

问题是一旦插入的数据是错误的,我们如何从那次运行中恢复?目前我只有一个日志文件(我创建了格式),它记录了插入的原始数据(没有元数据也没有主键)。有没有一种方法可以创建数据库可以理解的日志,并且一旦我们想要撤消插入,我们就可以向数据库提供该日志文件。

或者,如果有从程序中撤消操作的替代机制,请告诉我,谢谢。

4

2 回答 2

1

事实上,这只有数百行,这使得它可以被所有撤消机制的曾祖母所接受:

  • 每次运行都有一个表格importruns,其中有一行。我假设它有一个整数自增 PK
  • 向您的数据表添加一个字段,该字段标识携带导入运行的 PK
  • 对于仅插入运行,您只需要DELETE FROM sometable WHERE importid=$whatever

如果您也有替换/更新导入,请更进一步

  • 对于每个数据表都有一个对应的表,该表多一个字段:superseededby
  • 对于您更新/替换的每一行,在此表中放置该行的原始副本加上导入 idsuperseededby
  • 要还原,您现在必须添加INSERT INTO originaltable SELECT * FROM superseededtable WHERE superseededby=$whatever

您可以清理superseededtable已知良好的进口,以确保存储不会无限增长。

于 2012-10-22T23:19:20.547 回答
0

你有几个选择。取决于您何时注意到错误。如果您知道数据有错误,您可以使用事务 API 回滚到当前事务的更改。

如果您稍后才知道有错误,那么您可以创建自己的日志。创建一个标识事务的索引,并将一个字段添加到将插入该 ID 的相关表中。这将允许您准确识别它来自哪个交易。您还可以创建一个存储过程,根据给定的事务 ID 删除行。

于 2012-10-22T23:13:53.537 回答