我有一个数据库,其中包含几个要从中读取的 InnoDB 表,然后将数据转储为 XML 格式。这样的 XML 将表示一个对象及其所有相关对象。
我不希望在我的读取过程(SELECT、SELECT、bad INSERT、SELECT...)中间执行任何 INSERT,因为这会导致数据不一致。我应该使用哪种类型的交易?我无法清楚地看到 和 之间的START TRANSACTION
区别START TRANSACTION WITH CONSISTENT SNAPSHOT
。
我有一个数据库,其中包含几个要从中读取的 InnoDB 表,然后将数据转储为 XML 格式。这样的 XML 将表示一个对象及其所有相关对象。
我不希望在我的读取过程(SELECT、SELECT、bad INSERT、SELECT...)中间执行任何 INSERT,因为这会导致数据不一致。我应该使用哪种类型的交易?我无法清楚地看到 和 之间的START TRANSACTION
区别START TRANSACTION WITH CONSISTENT SNAPSHOT
。
对于 INNODB 的事务快照来说,这似乎是一个极好的案例。你是对的,WITH CONSISTENT SNAPSHOT 之间的区别并不重要——它只控制快照是在开始事务时拍摄还是在第一次读取时拍摄。
重要的是您必须在 REPEATABLE_READ 隔离级别执行。这是默认级别。
其他程序可以根据需要插入或更新尽可能多的记录,您仍然可以从快照中获取版本。
见http://dev.mysql.com/doc/refman/5.0/en/innodb-consistent-read.html