Mysql数据库的悲观锁和乐观锁

 一次数据库的修改数据的过程包括:读取,修改,写入。

 悲观锁,认为在整个过程中都会面临数据被其他session修改的可能性,所以为了保证修改过程能顺利进行,使用排它锁保证在当前session修改数据时,不允许其他session修改相同行的数据。

 乐观锁,认为在读取和修改的时候不会有session修改同行数据,所以它只在写入的时候进行一下检查版本号。如果版本号没有变,也就是说读取数据和写入新数据时版本号比对相同,那么则将数据写入。否则,返回操作失败信息,由用户决定如何处理。

 悲观锁的使用事例:

Select...for update事例:

          set autocommit =0;//关闭自动提交

          begin;//开始事务

          select * from order where id=989879 for update;//查询信息

          update order set name='names';//修改信息

          commit;//提交事务

执行select…for update时,般的SELECT查询则不受影响。

乐观锁的使用事例:

例如有表Teacher,字段:

| id | name | version |

| 23|  coco   |  4 |

当事务一进行更新操作:update teacher set name='nason' where id = #{id} and version = #{version};

此时操作完后数据会变为id = 23,name = nason,version = 5,当另外一个事务二同样执行更新操作的时候,却发现version != 4,此时事务二就会操作失败,从而保证了数据的正确性。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值