MySQL 悲观锁和乐观锁
时间:2017/12/25 13:56:39
参考:
环境:
- MySql 5.7.17
乐观锁悲观锁#
乐观锁和悲观锁简介#
悲观锁(Pessimistic Concurrency Control):认为每次对数据库的操作都会出现不同步的问题,因此每次更新数据的时候,都对要更新的数据进行加锁操作(其他事务对加锁数据的访问会阻塞),防止其他事务同时修改数据产生数据不同步问题。基于数据库的Inno DB引擎的行锁和表所实现。
乐观锁(Optimistic Lock):认为每次对数据库进行操作不会出现不同步问题,此时要保证数据的完整性,需要用户自己通过一些技术手段控制,比如版本号(ES就是基于版本版本号进行数据一致性控制的)进行数据一致性控制。
乐观锁和悲观锁简单实现#
乐观锁原理:
-
通过版本号控制,给数据增加一个
verson
列,每次事务开始的时候,获取版本号,事务提交的时候比较事务开始时的版本号和提交时的版本号是否一样,不一样则重新处理,或者提示错误。
JPA 乐观锁#
-
实体增加version字段,并增加@Version注解。