【MySQL】乐观锁的实现

举报
原来是咔咔 发表于 2022/03/26 23:08:56 2022/03/26
【摘要】  序言 乐观锁是相对于悲观锁而言的。悲观锁大多数情况下是依靠数据库的锁机制实现的,悲观锁影响数据库的性能,而乐观锁是基于数据库版本记录机制来实现的。何谓数据库版本?即为数据库增加一个版本表示的字段,在读取数据的时候将版本号一同读出,在数据更细后,对此版本号加一。然后将提交的版本数据跟数据表对应记录信息进行对比,如果提交的数据...

 序言

乐观锁是相对于悲观锁而言的。悲观锁大多数情况下是依靠数据库的锁机制实现的,悲观锁影响数据库的性能,而乐观锁是基于数据库版本记录机制来实现的。何谓数据库版本?即为数据库增加一个版本表示的字段,在读取数据的时候将版本号一同读出,在数据更细后,对此版本号加一。然后将提交的版本数据跟数据表对应记录信息进行对比,如果提交的数据版本号大于数据表的版本号,则更细。都这认为是过期数据

简言之:乐观锁和悲观锁是抽象的存在,并没有实际的锁,乐观锁就是没有使用实际的锁,而悲观锁使用了实际的锁,比如共享锁,排它锁

解决问题

在并发时,对于多个进程操作同一数据的操作,例如秒杀,修改库存情况

实现代码


  
  1. // 乐观锁
  2. // alter table count add column version char(20) default 0;
  3. $prefix = 'd1d';
  4. $sql = 'select * from count where prefix = "dz10021"';
  5. $data1 = $db->query($sql);
  6. $data2 = $db->query($sql);
  7. var_dump('===>>>> data 1');
  8. var_dump($data1);
  9. var_dump('===>>>> data 2');
  10. var_dump($data2);
  11. // 修改数据 1
  12. $sql1 = 'update count set count = 13,version = version + 1 where prefix = "dz10021" and version = '.$data1['version'];
  13. var_dump($db->execute($sql1));
  14. // 修改数据 2
  15. $sql2 = 'update count set count = 14,version = version + 1 where prefix = "dz10021" and version = '.$data2['version'];
  16. var_dump($db->execute($sql2));

分析代码

文章来源: blog.csdn.net,作者:咔咔-,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/fangkang7/article/details/97767885

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。