一致的阅读

时间:2015-02-18 15:46:10

标签: mysql sql

这是来自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

Link to docs

有人可以权威地回答这个问题:在上面的示例中,我们可以看到SELECT之后UPDATE看到由不同并发事务提交的更改。看起来UPDATE语句刷新SELECT语句的快照视图,对吗?它是后续SELECT语句的全新快照视图还是“t1”表的新快照视图?

0 个答案:

没有答案