MySQL 乐观锁

马谦马谦马谦 2017年11月23日22:11:26 发表评论
文章最后编辑于:2017-11-23 22:23:59

一、乐观锁说明

乐观锁的使用原理是在数据表中添加一个版本字段,每次先查询当前的版本,在更新数据的时候判断版本是否和查询到的版本一致,一致就说明数据没有被修改,可以操作数据并把版本号+1;如果版本号不一致就说明数据已经被更改了,不进行操作。

相对悲观锁来说,乐观锁用得更广泛一点,但乐观锁的缺点是操作失败率高。假设同一时刻有100个线程读取了数据的版本为1,只要其中一个成功更新了数据,那么剩下的99都会失败,失败率高达(n-1)/n

二、使用方法

乐观锁有两种常用的版本控制方法。

第一种方法是在数据库中加入版本字段,每次操作后把版本+1。

第二种方法同样也是插入新字段,只是插入的字段类型为时间戳,在更新数据时先判断时间戳是否一致。

两者原理一样,只是实现的方式不同。

三、示例

创建一个表:

开启两个终端,查询id=1的记录并记下版本号为0

当要更新数据的时候根据带上版本号更新:

第二个终端再根据0的版本号更新数据就不会操作成功:

 

 

 

本文共执行41次查询,耗时0.275秒!
历史上的今天
十一月
23
马谦马谦马谦

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: