InnoDB锁定模式和兼容性理解

首先分为两大类
1.读写锁 2.意向锁,(X S IX IS锁都是表锁)
一.读写锁
互斥锁(Exclusive),简称X锁,又称写锁
共享锁(Share),简称S锁,又称读锁
X锁和S锁都是表锁,有以下两个规定:

  1. 一个事务对数据对象 A 加了 X 锁,就可以对 A 进行读取和更新。加锁期间其它事务不能对 A 加任何锁
  2. 一个事务对数据对象 A 加了 S 锁,可以对 A 进行读取操作,但是不能进行更新操作。加锁期间其它事务能对 A 加 S 锁,但是不能加 X 锁

二.意向锁
意向锁在原来的 X/S 锁之上引入了 IX/IS,IX/IS 都是表锁,用来表示一个事务想要在表中的某个数据行上加 X 锁或 S 锁。有以下两个规定:

  1. 一个事务在获得某个数据行对象的 S 锁之前,必须先获得表的 IS 锁或者更强的锁;
  2. 一个事务在获得某个数据行对象的 X 锁之前,必须先获得表的 IX 锁

三.兼容关系和理解
首先把四个名字的含义理解了:
X理解为独占一个表(exclusive)
S理解为共享一个表(整个表共享读)
IX理解为有意向写这张表的某一行(有意向独占某一行、先占一个坑)
IS理解为有意向读这张表的某一行
兼容关系

一开始学这个知识,很多小伙伴傻傻分不清兼容关系
不过找到技巧还是很容易掌握的!
1.X是独占整个表,当表中已经存在了X、S、IX、IS任意一种锁,X锁一定加不上了,因为无法满足独占。同理,表中已经存在X,其他锁都加不上了(必须独占)
2.IX和S锁不兼容,IX是独占某一行,既然IX占领了某一行,那么就不能S整个表共享读了
3.IX和IS兼容,某一行有意向独占和另一行有意向共享读是可以成立的
4.IX和IX之间兼容,可以存在IX想要独占row_a,另一个IX想要独占row_b,只要a≠b即可成立
5.整个兼容表其实是对称的 (行列顺序都按照 X、S、IX、IS)

猜你喜欢

转载自blog.csdn.net/weixin_39666736/article/details/105242584
今日推荐