如何在这种情况下使数据库保持一致?

时间:2013-07-30 10:30:58

标签: mysql database

我在处理从一个文件到另一个文件的数据库表条目的副本时遇到问题。

假设我有两个名为one.sql,two.sql的表,现在我将一些记录从one.sql传输到表two.sql,然后从one.sql中删除该条目,复制成功。

问题:假设我从一到两个复制删除记录后电源消失了  从一个未完成,在这种情况下,相同的记录将在两个表中。我不想要的。所以在这种情况下如何在飞行中处理这些类型的不一致。

2 个答案:

答案 0 :(得分:3)

您的RDBMS 不是一个简单的数据存储区!它支持journalingtransaction isolationatomic updates。所以......

...使用事务表( InnoDB )并且具有良好的隔离级别,只需执行以下操作:

START TRANSACTION -- Or SET autocommit = 0
INSERT INTO two SELECT * FROM one WHERE ...;
DELETE FROM one WHERE ...;
COMMIT

COMMIT atomicity 将更改应用于数据库。也就是说,从其他交易的角度来看,此举是已完成未启动。没人能看到一半完成。即使遇到灾难​​性故障(断电)。

当然,如果你移动所有你的记录,你也可以依赖RENAME TABLE ......

答案 1 :(得分:1)

您可以使用transaction blocks在某种程度上降低意外结果。但解决电力问题是另一回事。

但是,如果您担心电源问题,可以使用批处理并检查两个表是否在某个时间间隔内不包含相同的记录。