
乐观锁不是在数据库端锁住的
而是程序控制的
你说的那Mybatis我不知道是什么
但是乐观锁一般是这样
比如你数据库中有一条记录
你可以给他加上一个版本号
这样
如果同时有2个人查询出那个数据要修改
第一个人先查出来有事走了
第二个人查出来给改了
这时候你看
第一个人查出来的数据版本号比如是1
第二个人查出来也是1 但是他改了数据以后版本号变成2
这时候第一个人回来了继续修改数据
他的版本号是1 比2低
这时候就告诉他数据过期
乐观锁大概就是这个意思
是一种思路!
悲观锁和乐观锁定义:
乐观锁:乐观锁在 *** 作数据时非常乐观,认为别人不会同时修改数据。因此乐观锁不会上锁,只是在执行更新的时候判断一下在此期间别人是否修改了数据:如果别人修改了数据则放弃 *** 作,否则执行 *** 作。
悲观锁:悲观锁在 *** 作数据时比较悲观,认为别人会同时修改数据。因此 *** 作数据时直接把数据锁住,直到 *** 作完成后才会释放锁;上锁期间其他人不能修改数据。
悲观锁实现方式
悲观锁的实现,往往依靠数据库提供的锁机制。在数据库中,悲观锁的流程如下:
1.在对记录进行修改之前,先尝试为该记录加上排它锁(exclusive locking)。
2.如果加锁失败,说明该记录正在被修改,那么当前查询可能要等待或者抛出异常。具体响应方式由开发者根据实际需要决定。
3.如果成功加锁,那么就可以对记录做修改,事务完成后就会解锁了。
4.期间如果有其他对该记录做修改或加排它锁的 *** 作,都会等待解锁或直接抛出异常。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)