MySQL锁
wzg 9/1/2022 MySQLLock
# 锁
# 基于属性
# 共享锁(Share Lock)(S锁)
SELECT ... LOCK IN SHARE MODE
其他事务只能对该数据加读锁,而不能加写锁
读数据的时候不支持修改,避免重复读
# 排它锁(eXclusive Lock)(X锁)
SELECT ... FOR UPDATE
其他事务不能为数据加任何锁
不允许其他人同时修改,不允许其他人读取,避免了出现出现脏数据和脏读
# 基于粒度
表锁不会发生死锁,行锁会发生死锁
# 表锁
LOCK TABLES ... READ
LOCK TABLES ... WRITE
# 行锁
# 记录锁(Record Lock)
唯一索引命中
避免重复读:数据在查询的时候被修改
避免脏读:在修改的事务未提交前被其他事务读取
# 间隙锁(Gap Lock)
左开右闭 (]
范围查询并且未命中记录,查询条件必须命中索引
只会出现在REPEATABLE_READ事务级别中
防止幻读问题
# 临键锁(Next-Key Lock)
InnoDB行锁默认算法
范围查询并命中,查询命中了索引
避免了脏读,重复读,幻读