本文介绍了InnoDB/MySQL-新事务在SELECT上使用旧数据,而不是返回更新的数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  1. 开始交易Tx1
  2. Tx1执行SELECT
  3. 提交Tx1
  4. 使用不同的连接在不同的会话中开始交易Tx2
  5. Tx2执行SELECT
  6. 更新Tx2中的行
  7. 提交Tx2
  8. 开始新的交易,Tx1
  9. 执行选择-从步骤2(??)获取结果
  10. 提交Tx1
  11. 开始交易Tx1
  12. 执行选择-获得正确的结果,即来自Tx2的已提交更新
  1. Begin transaction Tx1
  2. Tx1 performs a SELECT
  3. Commit Tx1
  4. Begin transaction Tx2 in a different session, using a different connection
  5. Tx2 performs a SELECT
  6. Update rows in Tx2
  7. Commit Tx2
  8. Begin a new transaction, Tx1
  9. Perform select - get results from step 2(??)
  10. Commit Tx1
  11. Begin transaction Tx1
  12. Perform select - get CORRECT results, i.e. the committed updates from Tx2

非常困惑……这怎么会发生?它正在持续可靠地发生.

Very confused... How can this happen? It is happening reliably and consistently.

推荐答案

事实证明,如果将事务隔离级别设置为REPEATABLE READ,则可能会发生这种情况.将事务隔离级别设置为READ COMMITTED,一切都是笨拙的.并不能真正解释原因(一定是BEGIN TRANSACTION徘徊吗?)

Turns out this can happen if the transaction isolation level is set to REPEATABLE READ. Set the transaction isolation level to READ COMMITTED and everything is hunky dory. Doesn't really explain why (must be some sort of BEGIN TRANSACTION hanging around?)

这篇关于InnoDB/MySQL-新事务在SELECT上使用旧数据,而不是返回更新的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-17 00:59