乐观锁:相对于悲观锁而言,只有更新数据的时候才会认为数据可能被修改。一般是再更新的时候做数据正确性判断。实现方式一般是mysql程序设计角度考虑。
有些时候我们在参与团队中的项目或者阅读他人项目的时候,可能会发现mysql的一些表在设计的时候有一个_version字段。
这类字段并不是出于业务角度出发的必要字段,那么我们不禁会问这样一个字段设置有什么作用呢?
讲到这里我们不得不引入两个概念:悲观锁和乐观锁。
悲观锁:在读数据的时候就悲观的认为我的这些数据会被修改。所以在读的时候就给数据上锁,直到整个事务结束再解锁。实现方式一般是mysql本身提供的锁机制。
乐观锁:相对于悲观锁而言,只有更新数据的时候才会认为数据可能被修改。一般是再更新的时候做数据正确性判断。实现方式一般是mysql程序设计角度考虑。
给mysql表添加version字段就是常见的乐观锁。从程序角度解决mysql的数据冲突问题。
具体是怎么实现:
1.表中加一个版本字段,相当于对表中的每一行数据做了一个版本标记。
2.正常读取数据,记录下当前数据的版本号。
3.更新数据的时候,版本号+1,并且对比此前记录的版本号和当前版本号是否一致作为更新条件。
//表中添加了_version字段
$sql = select * from goods where id = 1;
$data = $dbEngin->query();//正常查询数据
$old_version = $data[0]['version'];//记录读取时的版本号
$sql = update set price = price + 100, _version = _version + 1 where id=1 and _version = $old_version;
//更新时检测版本号是否发生变化,在成功更新时间的时候把版本号也加1。
$res = $dbEngin->query()
if ($res) {
//更新成功
}else{
//更新失败
}
以上便是乐观锁的实现方式的解析。在项目中结合php程序进行处理,数据的更新情况及时做出反馈。
除特别注明外,本站所有文章均为作者原创。 或分享自己的编程经验,或探讨工作中的问题,或聊以人生趣事。 转载请注明出处来自 https://www.qiusuoweb.com/48.html
运营天数
总访问量
文章数量
-
-
-
交流群:157451741
新浪微博:草莽兴
发布评论