这是来自MySQL文档(下面提供的链接)
注意 数据库状态的快照适用于事务中的SELECT语句,不一定适用于DML语句。如果插入或修改某些行然后提交该事务,则从另一个并发REPEATABLE READ事务发出的DELETE或UPDATE语句可能会影响那些刚刚提交的行,即使会话无法查询它们。如果事务确实更新或删除了由其他事务提交的行,则这些更改将对当前事务可见。例如,您可能会遇到如下情况:
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
有人可以权威地回答这个问题:在上面的示例中,我们可以看到SELECT
之后UPDATE
看到由不同并发事务提交的更改。看起来UPDATE
语句刷新SELECT
语句的快照视图,对吗?它是后续SELECT
语句的全新快照视图还是“t1”表的新快照视图?