zoukankan      html  css  js  c++  java
  • 乐观锁和悲观锁

    乐观锁是一种思想,具体实现是表中有一个版本字段,第一次读的时候获取到这个字段。处理完业务逻辑开始更新的时候,需要再次查看该字段的值是否和第一次一样。如果一样更新,反之不更新。为什么叫乐观,原因是这个模式没有从数据库加锁,等到更新的时候再判断是否可以更新。

    悲观锁是数据库成名加锁,都会阻塞去等待锁。

    悲观锁:

    使用悲观锁很简单,直接手动加锁就行了。例如select * from XX for update。在select语句后面加了for update相当于加了排他锁(写锁),加了写锁后,其他的事务就不能对它修改了。需要等待当前事务修改完以后才可以修改。同一条记录,如果一个用户A使用select …… for update,B用户就不能对该条数据进行修改,必须A用户完成当前事务,B才可以对该条记录操作。

    乐观锁:

    不是数据层面上的锁,是需要自己手动去加的锁。一般添加一个版本实现。具体过程:

    A用户select * from table会查询出记录,同时也会有一个version字段,B用户select * from table也会查询出记录,也有一个version字段。B用户对这条记录进行修改:update a set name=”yy”,version = version+1 where ID=#{id} and version =#{version},判断之前查询到的version与现在的数据的version比较,同时会更新version字段。然后数据库的记录进行了修改,1 yy 2。B用户也对这条记录做同样修改,但是失败了,因为当前数据库中的版本和查询出来的不一致。

    欢迎批评指正,提出问题,谢谢!
  • 相关阅读:
    luogu1060开心的金明
    luogu1048采药
    uva1025城市里的间谍
    scoi刷题记录(2019/04/07)
    差分及树上差分的正确食用姿势(2019/2/21学习笔记)
    图论技巧(2019/1/28之一)
    考试反思(2019/1/26学习笔记)
    考试反思(2019/1/22)
    「一本通 5.2 例 5」皇宫看守
    「一本通 5.2 例 3」数字转换
  • 原文地址:https://www.cnblogs.com/xxeleanor/p/14369506.html
Copyright © 2011-2022 走看看