46、并发事务带来了哪些问题?如何解决?

①第一是脏读,比如事务A读取了一条记录的值并进行了修改,但在事务A提交之前,又来了个事务B也读取了这条记录的值,导致事务B读取的是一条脏数据。

第二是不可重复读,比如在事务A内,两次读取同一条记录,但返回的结果不一样,这是因为在事务A的两次读取之间,有一个事务B对这条记录进行了update操作。

第三是幻读,比如在事务A内,两次使用相同的select查询语句,但返回的记录条数不一样,这是因为在事务A的两次查询之间,有一个事务B对这些记录进行了insert或delete操作。

第四是更新丢失,比如事务A和事务B并发修改同一条记录时,读到了相同的值,此时如果事务A先提交,后提交的事务B就可能会覆盖掉事务A的更新结果,相当于丢弃了事务A的更新。

②解决方法是对事务进行隔离,MySQL中有4种隔离级别。

第一种,读未提交,这是最低的隔离级别,允许一个事务读取另一个事务还未提交的数据,可能会导致脏读、不可重复读和幻读。

第二种,读已提交,每个事务只能读取其他事务已经提交的数据,能解决脏读,但不能解决不可重复读和幻读。

第三种,可重复读,保证了在同一个事务内,多次读取同一条记录得到的结果是一样的,能解决脏读和不可重复读,但不能解决幻读。

第四种,串行化,这是最高的隔离级别,保证了每个事务按照顺序依次执行,能解决脏读、不可重复读和幻读。

对于更新丢失问题,我们可以使用悲观锁,只有获取到锁才能读取和修改数据,修改完后再释放锁。

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值