V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zjsxwc
V2EX  ›  程序员

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

  •  
  •   zjsxwc ·
    zjsxwc · 2023-07-12 10:26:11 +08:00 · 588 次点击
    这是一个创建于 499 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为 mysql 默认事务的隔离级别是“可重复读”,

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

    问题来了:
    我开了两个事务,
    这两个事务里都需要同时修改了乐观锁的表里的同一行,
    由于“可重复读”,version 字段在在同一个事务里前后两次读都一样,
    也就是意味这我两个事务里都能改这一行数据成功,
    那么两个事务也都能 commit 成功,把这一行数据改了两次,
    那么是不是意味这我的乐观锁失效了?
    没能阻止这一行数据被改第二次。
    zjsxwc
        1
    zjsxwc  
    OP
       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
        2
    pkoukk  
       2023-07-12 10:53:35 +08:00
    “可重复读”,如字面意思,只能重复读,update 有锁
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2624 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:55 · PVG 09:55 · LAX 17:55 · JFK 20:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.