300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > mysql mvcc实现乐观锁_MVCC-乐观锁

mysql mvcc实现乐观锁_MVCC-乐观锁

时间:2019-08-18 02:03:22

相关推荐

mysql mvcc实现乐观锁_MVCC-乐观锁

Mysql

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

什么是MVCC?

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

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

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

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

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

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

核心SQL代码:

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。