Mysql行锁

63 阅读1分钟

简单介绍下行锁?

假如事务A对行数据进行操作,事务B必须等待事务A处理完才能操作。

两阶段锁协议对行锁的影响?

在Innodb事务中,是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放。

简单介绍下死锁?

比如两个人,我的左手拦着你的右手,你的左手拉着我的右手,谁也不松手,死死抓着对方不能动弹。

事务排序怎么排好?

把最容易造成锁冲突的事务放在最后处理。

为什么要死锁检测?

解除死锁有两种方法,

设置一个锁等待超时时间,这个时间不好设置,容易误伤正常等待的事务。

发起死锁检测,发生死锁后,主动回滚锁链条中的某一个事务,让其他事务得以继续执行。

为什么要调整行锁的发生时机?

如果你的事务中需要锁多个行,要把最可能造成锁冲突、最可能影响并发度的锁的申请时机尽量往后放。

三个解决死锁的方案是什么?

  • 关闭临时死锁检测,前提是确保业务不会发生死锁
  • 控制并发度,限制进入mysql的数量
  • 把一个总的数据,分成几个小部分,随机选择其中一个部分进行操作

总结

本章学到了行锁容易造成死锁发生,我们要避免发生死锁,虽然有死锁检测,我们应该在业务逻辑中设计好。