MySql教程

MySQL数据库事务可重复读无法解决第二类丢失更新

本文主要是介绍MySQL数据库事务可重复读无法解决第二类丢失更新,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

mysql数据库,通过设置事务隔离级别为可重复读(REPEATABLE_READ)无法避免发生“第二类丢失更新”问题。

 

第二类丢失更新:

它和不可重复读本质上是同一类并发问题,通常将它看成不可重复读的特例。当两个或多个事务查询相同的记录,然后各自基于查询的结果更新记录时会造成第二类丢失更新问题。每个事务不知道其它事务的存在,最后一个事务对记录所做的更改将覆盖其它事务之前对该记录所做的更改。

 

解决方案:

A. 悲观锁方案:

1. 开启事务的方法执行之前先加锁(分布式环境需要加分布式锁)。特别注意:在事务方法内部的某个步骤加锁,是无效的,因为这一步骤执行完毕释放锁后,当前事务仍未提交,若在此期间另一个事务B已经开始执行,那么事务B仍然会拿到之前提交的数据。

 

B. 乐观锁方案:

1. 执行更新SQL语句时,条件中增加对数据版本的判断,必须是对查询到的那个版本的数据进行更新,且update语句执行完毕后检查更新行数,如果更新时版本号已发生改变,此时update语句返回的行数肯定预期的行数,此时可认定为查询后更新前这段时间数据已发生改变,抛出异常,然后重试

这篇关于MySQL数据库事务可重复读无法解决第二类丢失更新的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!