我正在开发一个程序,它应该在每次运行时向数据库插入数百行。
问题是,一旦插入的数据错误,我们如何从该运行中恢复?目前我只有一个日志文件(我创建了格式),它记录了插入的原始数据(没有元数据也没有主键)。有没有办法可以创建数据库可以理解的日志,一旦我们想要撤消插入,我们就会用该日志文件为数据库提供数据。
或者,如果有其他机制从程序中撤消操作,请告诉我,谢谢。
答案 0 :(得分:1)
事实上,这只有几百行,这使得所有撤销机制的曾祖母都能成功:
importruns
,每次运行都有一行。我假设它有一个整数自动增量PK DELETE FROM sometable WHERE importid=$whatever
如果您还有替换/更新导入,请更进一步
superseededby
superseededby
INSERT INTO originaltable SELECT * FROM superseededtable WHERE superseededby=$whatever
您可以清除superseededtable
已知良好的导入,以确保存储不会无限增长。
答案 1 :(得分:0)
您有几种选择。取决于您何时发现错误。 如果您知道数据存在错误,则可以使用事务API回滚到当前事务的更改。
如果您知道以后只有错误,那么您可以创建自己的日志。创建标识事务的索引,并将字段添加到将插入该id的相关表中。这将允许您准确识别它来自哪个交易。您还可以创建一个存储过程,根据给定的事务ID删除行。