mysql中锁主要分为乐观锁和悲观锁,乐观锁需要自己去实现通常都是加版本号。悲观锁在mysql中是有具体实现的,而且实现的种类比较多。
首先悲观锁可以分为行锁和表锁:
行锁分为共享锁(S)和排它锁(X)
排它锁则分为:
在RR隔离级别下:分为记录锁(record lock)、间隙锁(gap lock)、临健锁(记录锁+间隙锁)(next-key lock)
在RC隔离级别下:只有记录锁
表锁分为意向锁和自增锁
意向锁分为意向共享锁(IS)和意向排它锁(IX)
自增锁就是控制主键递增的
下面看一下在不同隔离级别下不同的sql语句加锁的情况只分析排它锁(select * from t for update)
RR隔离级别下:
1、无主键无唯一索引无普通索引:
表:意向排它锁(lock mode IX)
记录:临键锁+边界最大值锁(lock mode X + supremum)
结果:相当于锁全表
2、无主键无唯一索引有普通索引:
条件有索引:
表:意向排它锁(lock mode IX)
记录:
索引条件&#x