欢迎光临
我们一直在努力

MVCC-乐观锁

MVCC是乐观锁的一种实现方式,但并不是MVCC就等于乐观锁。乐观锁( Optimistic Locking)其实是一种思想。相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。

什么是MVCC?

英文全称为Multi-Version Concurrency Control,翻译为中文即多版本并发控制。MVCC使得InnoDB的事务隔离级别下执行一致性读操作有了保证,换言之,就是 为了查询一些正在被另一个事务更新的行,并且可以看到它们被更新之前的值。这是一个可以用来增强并发性的强大的技术,因为这样一来的话查询就不用等 待另一个事务释放锁。这项技术在数据库领域并不是普遍使用的。一些其它的数据库产品,以及mysql其它的存储引擎并不支持它。

一般是在数据表中加上一个版本号version字段,表示数据被修改的次数,当数据被修改时,version值会加一。当线程A要更新数据值时,在读取数据的同时也会读取version值,在提交更新时,若刚才读到的version值与当前数据库中的version值相等时才更新,否则重试更新操作,直到更新成功。

mysq旳innodb表除了实际的数据之外,还会加上3个隐藏的字段,如下:

实际数据
create_no(创建版本号/创建时间) update_no(每次修改的版本号/修改时间) delete_no(删除版本号/删除时间)

insert:当我们新增一条数据时,这条数据会加上创建的版本号

update:修改当前的字段,每修改一次数据,修改版本号都会依次增加一次

delete:删除当前的数据,其实并不会真实的删除,他会先在删除版本号字段记录下删除的版本号,在过了一段时间后会进行清除或者刷新

核心SQL代码:

update table set x=x+1, version=version+1 where id=#{id} and version=#{version};  

赞(0) 打赏
未经允许不得转载:码农资源网 » MVCC-乐观锁
分享到

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册