MySQL知识点整理
2017-10-16 14:57
309 查看
乐观锁介绍
乐观锁(Optimistic Locking) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。那么我们如何实现乐观锁呢,一般来说有如下方式:使用数据版本(Version)记录机制实现,这是乐观锁最常用的一种实现方式。何谓数据版本?即为数据增加一个版本标识,一般是通过为数据库表增加一个数字类型的 “version”字段来实现。当读取数据时,将version字段的值一同读出,数据每更新一次,对此version值加一。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的version值进行比对,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新,否则认为是过期数据。
乐观锁的实现
update ${prefix}ACT_RU_EXECUTION set REV_ = #{revisionNext, jdbcType=INTEGER},BUSINESS_KEY_ = #{businessKey, jdbcType=VARCHAR} where ID_ = #{id, jdbcType=VARCHAR} and REV_ = #{revision, jdbcType=INTEGER}
乐观锁(Optimistic Locking) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。那么我们如何实现乐观锁呢,一般来说有如下方式:使用数据版本(Version)记录机制实现,这是乐观锁最常用的一种实现方式。何谓数据版本?即为数据增加一个版本标识,一般是通过为数据库表增加一个数字类型的 “version”字段来实现。当读取数据时,将version字段的值一同读出,数据每更新一次,对此version值加一。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的version值进行比对,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新,否则认为是过期数据。
乐观锁的实现
update ${prefix}ACT_RU_EXECUTION set REV_ = #{revisionNext, jdbcType=INTEGER},BUSINESS_KEY_ = #{businessKey, jdbcType=VARCHAR} where ID_ = #{id, jdbcType=VARCHAR} and REV_ = #{revision, jdbcType=INTEGER}
int updatedRecords = sqlSession.update(updateStatement, updatedObject); if (updatedRecords!=1) { throw new ActivitiOptimisticLockingException(updatedObject + " was updated by another transaction concurrently"); }
相关文章推荐
- MYSQL知识点整理
- MySQL高级查询,事务,视图,知识点整理
- 最近用到mysql和mybatis结合常用的知识点坐下整理
- mysql整理的一些重点知识点
- MySQL知识点整理
- MySQL知识点整理
- 开发使用mysql的一些必备知识点整理(一)初阶
- mySql知识点整理
- MySQL知识点整理(学习资料)
- 开发使用mysql的一些必备知识点整理(二)查询
- mysql的知识点整理
- 开发使用mysql的一些必备知识点整理(三)高级
- 开发使用mysql的一些必备知识点整理(四)与python交互
- php中关于mysqli和mysql区别的一些知识点整理
- MySQL知识点整理
- MySQL数据表的数据类型、如何实现数据完整性以及日期函数等的基本知识点整理
- mysql运维必会的一些知识点整理(转自民工哥)
- php中关于mysqli和mysql区别的一些知识点整理
- mysql 知识点整理
- shell整理(42)====mysql 分库分表备份