我现在有两个想法
1.要改为读提交: MySQL默认的隔离级别是可重复读, 因为乐观锁要在事务执行时读取记录是否改变, 如果不能读取到已提交事务修改的记录, 乐观锁就没法实现了
2.不用改为读提交: update ... where stock=...语句会加X锁, 它是当前读, 也就是能读到当前最新的记录, 所以不用改也行
想法1应该是对的, 想法2我不确定是不是当前读, 能读取到最新的记录吗?
and 回答一下标题的问题吧
我现在有两个想法
1.要改为读提交: MySQL默认的隔离级别是可重复读, 因为乐观锁要在事务执行时读取记录是否改变, 如果不能读取到已提交事务修改的记录, 乐观锁就没法实现了
2.不用改为读提交: update ... where stock=...语句会加X锁, 它是当前读, 也就是能读到当前最新的记录, 所以不用改也行
想法1应该是对的, 想法2我不确定是不是当前读, 能读取到最新的记录吗?
and 回答一下标题的问题吧
3 回答1.7k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
3 回答1.6k 阅读
2 回答981 阅读✓ 已解决
自己动手解决了, 在MySQL默认的隔离级别-可重复读 下执行的
结论:
update ... where stock=...语句是当前读, 会加X锁,
在这条语句执行时, 会读取到已提交的记录(但在10处的select由于是RR下, 只能读到版本链的旧数据)
所以不用把事务隔离级别改为读提交