一个关于乐观锁的问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

一个关于乐观锁的问题

waasdasd 2017-10-19 18:01:35 2283

假设是一个购物系统,为了防止库存出现负的,做了个乐观锁,
就是只更新版本比数据库中的version高的,如果相同,就重新读一遍库存做判断票数够不够嘛,
但是这根直接在sql里面写,update xxx-20 where xxx-20>0 有啥区别,
也会保证库存不会出现负的,那乐观锁真正存在的意义是啥呢,
多谢

SQL 数据库
分享到
取消 提交回答
全部回答(5)
  • ~天空~
    2019-07-17 21:40:10
    已采纳

    update xxx-20 where xxx-20 > 0 //这个也有点乐观锁的味道.
    update xxx-20 where #{newVersion} > version 如果你更新一个 varchar(比方'地址'时), 上面就没办法了. 当然 , 你可以用原始值去比, 但有可能 地址经过了: a => b => c => a,

    就是经过好几步又变回了A, 这时, 你 update 地址=newA where 地址=a 就无法知道数据已被人改过.

    1 0
  • 1366484366001174
    2019-07-17 21:40:10

    乐观锁,指的是假设在程序读取到更新的这段时间,数据不被其他程序修改。所以,一般的sql一般为,比较version是否等于读取时候的值,即where version = {old_version},如果是,则更新,否则抛出异常,让上游重新查询,重试更新。

    0 0
  • yu_hc200
    2019-07-17 21:40:10

    判断版本号比判断库存为负更严格,他要求你更新的时候,数据库的记录还是你读出来的时候的记录,而判断库存未负只要求你更新的时候,你更新库存的结果大于0,即使你读出来后别人更新过这条记录也没关系

    0 0
  • mrcamel
    2019-07-17 21:40:10

    update xxx-20 where xxx-20>0 本身就是乐观锁,不必再读version判断了,判断也没用

    0 0
添加回答
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题
推荐课程