【MySQL】乐观锁的实现
【摘要】
序言
乐观锁是相对于悲观锁而言的。悲观锁大多数情况下是依靠数据库的锁机制实现的,悲观锁影响数据库的性能,而乐观锁是基于数据库版本记录机制来实现的。何谓数据库版本?即为数据库增加一个版本表示的字段,在读取数据的时候将版本号一同读出,在数据更细后,对此版本号加一。然后将提交的版本数据跟数据表对应记录信息进行对比,如果提交的数据...
序言
乐观锁是相对于悲观锁而言的。悲观锁大多数情况下是依靠数据库的锁机制实现的,悲观锁影响数据库的性能,而乐观锁是基于数据库版本记录机制来实现的。何谓数据库版本?即为数据库增加一个版本表示的字段,在读取数据的时候将版本号一同读出,在数据更细后,对此版本号加一。然后将提交的版本数据跟数据表对应记录信息进行对比,如果提交的数据版本号大于数据表的版本号,则更细。都这认为是过期数据
简言之:乐观锁和悲观锁是抽象的存在,并没有实际的锁,乐观锁就是没有使用实际的锁,而悲观锁使用了实际的锁,比如共享锁,排它锁
解决问题
在并发时,对于多个进程操作同一数据的操作,例如秒杀,修改库存情况
实现代码
-
// 乐观锁
-
// alter table count add column version char(20) default 0;
-
$prefix = 'd1d';
-
$sql = 'select * from count where prefix = "dz10021"';
-
$data1 = $db->query($sql);
-
$data2 = $db->query($sql);
-
var_dump('===>>>> data 1');
-
var_dump($data1);
-
var_dump('===>>>> data 2');
-
var_dump($data2);
-
// 修改数据 1
-
$sql1 = 'update count set count = 13,version = version + 1 where prefix = "dz10021" and version = '.$data1['version'];
-
var_dump($db->execute($sql1));
-
// 修改数据 2
-
$sql2 = 'update count set count = 14,version = version + 1 where prefix = "dz10021" and version = '.$data2['version'];
-
var_dump($db->execute($sql2));
分析代码
文章来源: blog.csdn.net,作者:咔咔-,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/fangkang7/article/details/97767885
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)