乐观锁 :
大多数是基于数据版本(version)的记录机制实现的。何谓数据版本?即为数据增
加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表添加一个“version”字段来实现读取出数据时,将此版本号一同读出,之后更新时,对此版本号加 1。
此时,将提交数据的版本号与数据库表对应记录的当前版本号进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。
=====================================================================
乐观锁实例:假设数据库中帐户信息表中有一个 version 字段,当前值为 1;而当前帐户余
额字段(balance)为$100。下面我们将用时序表的方式来为大家演示乐观锁的实现原理:
操作员 A 操作员 B
(1)、操作员 A 此时将用户信息读出(此时
version=1),并准备从其帐户余额中扣除$50
($100-$50)
(2)、在操作员 A 操作的过程中,操作员 B 也读入此
用户信息(此时 version=1),并准备从其帐户余额
中扣除$20($100-$20)
(3)、操作员 A 完成了修改工作,将数据版
本号加 1(此时 version=2),连同帐户扣除
后余额(balance=$50),提交至数据库更
新,此时由于提交数据版本大于数据库记录
当前版本,数据被更新,数据库记录 version
更新为 2
(4)、操作员 B 完成了操作,也将版本号加 1
( version=2 ) 并 试 图 向 数 据 库 提 交 数 据
(balance=$80),但此时比对数据库记录版本时发
现,操作员 B 提交的数据版本号为 2,数据库记录
当前版本也为 2,不满足“提交版本必须大于记录
当前版本才能执行更新”的乐观锁策略,因此,操
作员 B 的提交被驳回
==============================================================================================