美文网首页
乐观锁、悲观锁(共享锁S和排他锁X)总结

乐观锁、悲观锁(共享锁S和排他锁X)总结

作者: 丶君为红颜酔 | 来源:发表于2018-09-11 10:12 被阅读0次

乐观锁

乐观锁不是数据库自带的,需要我们自己去实现。乐观锁是指操作数据库时(更新操作),想法很乐观,认为这次的操作不会导致冲突,在操作数据时,并不进行任何其他的特殊处理(也就是不加锁),而在进行更新后,再去判断是否有冲突了。

1.查询出商品信息
select (status,status,version) from t_goods where id=#{id}
2.根据商品信息生成订单
3.修改商品status为2
update t_goods 
set status=2,version=version+1
where id=#{id} and version=#{version};

悲观锁:共享锁与排它锁

悲观锁就是在操作数据时,认为此操作会出现数据冲突,所以在进行每次操作时都要通过获取锁才能进行对相同数据的操作

​ 共享锁(S锁)又称为读锁,若事务T对A加上S锁,则事务T只能读A;其他事务只能再对A加S锁,而不能加排他锁(X锁),直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

​ 排他锁(X锁):如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。

mysql中select * from xx  where id =1 lock in share mode即可给该数据加共享锁,在该事务提交之前,不允许其他事务进行修改。
(ps:对于update,insert,delete语句会自动加排它锁)。
添加排它锁与添加共享锁类似,执行语句添加  “ for  update” 即可。

行锁和表锁

正在查阅资料。

参考:https://blog.csdn.net/puhaiyang/article/details/72284702

相关文章

网友评论

      本文标题:乐观锁、悲观锁(共享锁S和排他锁X)总结

      本文链接:https://www.haomeiwen.com/subject/sqvygftx.html