http://dev.mysql.com/doc/refman/5.5/en/innodb-consistent-read.html
注意
数据库状态的快照适用于SELECT语句 在事务中,不一定是DML语句。如果你插入 或修改一些行,然后提交该事务,DELETE或 从另一个并发REPEATABLE READ发出的UPDATE语句 事务可能会影响那些刚刚提交的行,即使是 session无法查询它们。如果事务确实更新或删除 由不同事务提交的行,这些更改确实成为 当前交易可见。例如,您可能会遇到一个 情况如下:
SELECT COUNT(c1) FROM t1 WHERE c1 = 'xyz'; -- Returns 0: no rows match.
DELETE FROM t1 WHERE c1 = 'xyz'; -- Deletes several rows recently committed by other transaction.
SELECT COUNT(c2) FROM t1 WHERE c2 = 'abc'; -- Returns 0: no rows match.
UPDATE t1 SET c2 = 'cba' WHERE c2 = 'abc'; -- Affects 10 rows: another txn just committed 10 rows with 'abc' values.
SELECT COUNT(c2) FROM t1 WHERE c2 = 'cba'; -- Returns 10: this txn can now see the rows it just updated.
答案 0 :(得分:0)
来自Glossary:
<强> DML 强>
数据操作语言,一组用于执行插入,更新和删除操作的SQL语句。
换句话说,它们是修改表中数据的SQL语句,而不是像SELECT
那样检索它。
该段落所说的内容,如下面的示例所示,修改查询可以影响在另一个事务中提交的行,即使这是在您启动当前事务之后发生的。当发生这种情况时,您的事务快照会更新以包含这些行。