乐观锁&悲观锁

支持情况

MyISAM仅支持表锁,BDB支持表锁和页锁,InnoDB支持表锁和行锁;

使用方式划分

乐观锁


我们认为系统中的事务并发更新不会很频繁,即使冲突了也没事,大不了重新再来一次。

用数据版本(Version)记录机制实现,这是乐观锁最常用的一种实现方式。何谓数据版本?即为数据增加一个版本标识,一般是通过为数据库表增加一个数字类型的 “version” 字段来实现。当读取数据时,将version字段的值一同读出,数据每更新一次,对此version值加1。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的version值进行比对,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新,否则认为是过期数据。

update TABLE
set value=2,version=version+1
where id=#{id} and version=#{version}

悲观锁

悲观锁就是在操作数据时,认为此操作会出现数据冲突,所以在进行每次操作时都要通过获取锁才能进行对相同数据的操作

Last updated