V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
salamanderMH
V2EX  ›  问与答

乐观锁?

  •  
  •   salamanderMH · Oct 20, 2019 · 2703 views
    This topic created in 2385 days ago, the information mentioned may be changed or developed.

    问题

    看网上例子都是加了一个"version"(版本号)的字段,然后更新语句是:

    // 查询需要更新的数据的版本号
    SELECT VERSION FROM `ubo_crowd` WHERE crowd_id = 12;
    // 更新数据,这里#{version}表示上面查询得到的版本号
    UPDATE `ubo_crowd` SET STATUS=2,VERSION=VERSION+1 WHERE crowd_id=12 AND VERSION=#{version};
    

    我现在设计了一张stock的表,一个idnum字段,感觉num字段直接就可以当作版本号的作用

    // num 是之前 select 语句读取出来的
    const results = await this.app.mysql
                    .query('update stock set num = num - 1 where id = ? and num = ?', [id, num])
    

    我觉得乐观锁也是靠 MySQL 的行锁( update 语句的缘故)

    10 replies    2019-10-20 21:56:52 +08:00
    mikulch
        1
    mikulch  
       Oct 20, 2019
    都学会自问自答了。
    mcfog
        2
    mcfog  
       Oct 20, 2019 via Android
    明天要做个退款 /支付失败后恢复库存的功能,gg
    hdbzsgm
        3
    hdbzsgm  
       Oct 20, 2019   ❤️ 2
    靠某个值 不如靠一个单调递增的版本号那么靠谱 ABA 了解一下
    salamanderMH
        4
    salamanderMH  
    OP
       Oct 20, 2019
    @mcfog 有订单表,退款后也可以加回去。
    salamanderMH
        5
    salamanderMH  
    OP
       Oct 20, 2019
    @hdbzsgm 这里更新都会上锁,是 X 锁,也是靠谱的
    hhhsuan
        6
    hhhsuan  
       Oct 20, 2019
    在一个名词后面加个问号,并不能构成一个问题
    mcfog
        7
    mcfog  
       Oct 20, 2019 via Android
    @salamanderMH 说的就是任何一个地方有加的逻辑你的 num 乐观锁就不成立了
    salamanderMH
        8
    salamanderMH  
    OP
       Oct 20, 2019
    @mcfog 为什么不成立了?
    scemsjyd
        9
    scemsjyd  
       Oct 20, 2019 via Android   ❤️ 1
    了解下 ABA
    salamanderMH
        10
    salamanderMH  
    OP
       Oct 20, 2019
    @hdbzsgm @scemsjyd
    我看了下,如果可增可减的话,确实有 ABA 这个问题。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   925 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 23:22 · PVG 07:22 · LAX 16:22 · JFK 19:22
    ♥ Do have faith in what you're doing.