Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何理解mysql文档中的“不一定是DML语句”?_Mysql_Innodb - Fatal编程技术网

如何理解mysql文档中的“不一定是DML语句”?

如何理解mysql文档中的“不一定是DML语句”?,mysql,innodb,Mysql,Innodb,注 数据库状态的快照应用于SELECT语句 在事务中,不一定是DML语句。如果你插入 或者修改某些行,然后提交该事务、删除或 从另一个并发可重复读取发出的UPDATE语句 事务可能会影响那些刚刚提交的行,即使 会话无法查询它们。如果事务确实更新或删除 由不同事务提交的行,这些更改将成为 对当前事务可见。例如,您可能会遇到 情况如下: 从: DML 数据操作语言,用于执行插入、更新和删除操作的一组SQL语句 换句话说,它们是修改表中数据的SQL语句,而不是像SELECT那样检索数据 如下面的示例所

注 数据库状态的快照应用于SELECT语句 在事务中,不一定是DML语句。如果你插入 或者修改某些行,然后提交该事务、删除或 从另一个并发可重复读取发出的UPDATE语句 事务可能会影响那些刚刚提交的行,即使 会话无法查询它们。如果事务确实更新或删除 由不同事务提交的行,这些更改将成为 对当前事务可见。例如,您可能会遇到 情况如下:

从:

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

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


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

您是否尝试单击DML链接?它链接到术语表并解释了它的含义。@Barmar当然,但它也提到了插入、更新、删除-这就是为什么我在这里问…@Barmar…还有这个源链接是关于选择作为快照的发起人如果我的回答对你没有帮助,你需要澄清这个问题。仅仅发布文档中的引用并不是一个明确的问题。请使用选择。。。用于在希望修改这些行时进行更新。我认为这将避免给出的例子的奇怪之处。我完全理解这一点,但上面问题的注释部分的第一句话是关于快照和选择的,但下一句是令人困惑的…只要您所做的只是选择语句,您将继续看到相同的数据-这就是快照。但是,如果您执行任何DML语句,来自其他事务的更改可能会泄漏到您的事务中。
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.