数据库问题:我乐观锁在事务里使用会不会失效?

2023-07-12 10:26:11 +08:00
 zjsxwc
因为 mysql 默认事务的隔离级别是“可重复读”,

我有个使用乐观锁的表,每行都有个 version 字段来应用乐观锁,

问题来了:
我开了两个事务,
这两个事务里都需要同时修改了乐观锁的表里的同一行,
由于“可重复读”,version 字段在在同一个事务里前后两次读都一样,
也就是意味这我两个事务里都能改这一行数据成功,
那么两个事务也都能 commit 成功,把这一行数据改了两次,
那么是不是意味这我的乐观锁失效了?
没能阻止这一行数据被改第二次。
587 次点击
所在节点    程序员
2 条回复
zjsxwc
2023-07-12 10:46:23 +08:00
已解决,不会导致乐观锁在事务里失效,
事务 A 里 update 某一行,会 block 别的事务修改这行到事务 A commit 后才能让别的事务修改。

![2060963a183d53e5d.png]( https://youjb.com/images/2023/07/12/2060963a183d53e5d.png)
![1ccbc776c381b6766.png]( https://youjb.com/images/2023/07/12/1ccbc776c381b6766.png)
pkoukk
2023-07-12 10:53:35 +08:00
“可重复读”,如字面意思,只能重复读,update 有锁

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/956069

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX