如何理解"不一定是DML语句"来自mysql文档?

时间:2015-07-07 10:55:03

标签: mysql innodb

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.

1 个答案:

答案 0 :(得分:0)

来自Glossary

  

<强> DML
  数据操作语言,一组用于执行插入,更新和删除操作的SQL语句。

换句话说,它们是修改表中数据的SQL语句,而不是像SELECT那样检索它。

该段落所说的内容,如下面的示例所示,修改查询可以影响在另一个事务中提交的行,即使这是在您启动当前事务之后发生的。当发生这种情况时,您的事务快照会更新以包含这些行。