mysql for update

环境:mysql 5.7
事务隔离级别 repeatable read

表当前的记录如下:
clipboard.png

会话一:开启事务,开启排它锁
clipboard.png

会话二:试图更新 id = 2的数据, 被阻塞。
clipboard.png

会话一:提交事务
clipboard.png

会话一 提交事务,会话二 SQL成功执行
clipboard.png

会话二 提交事务。
clipboard.png

在会话一 查询表,发现会话二的更新没有成功
clipboard.png

再次提交, 并重新查询,查到会话二更新的数据
clipboard.png

我的问题是:为什么,我会话一需要再提交一次,才能查看到会话二更新的数据??

不用 for update. 就是简简单单的 开2个事务。 会话2 更新完数据,并提交事务。 会话1提交事务,并查看数据,是可以查看到 会话2更新的数据的

阅读 2.5k
1 个回答

事务会话期间能不能看到改动和事务的隔离级别有关.

参见官方文档:
https://dev.mysql.com/doc/ref...

默认情况下是REPEATABLE READ, 可重复读,即在事务期间的多次读取返回同样的结果.

BTW:
mysql定义的四种隔离级别没有 repetable commit这个.

官网上只有

level:

   REPEATABLE READ
   READ COMMITTED
   READ UNCOMMITTED
   SERIALIZABLE

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题