MySQL锁

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行锁默认算法

范围查询并命中,查询命中了索引

避免了脏读,重复读,幻读

# 基于状态

# 意向共享锁

# 意向排它锁

Last Updated: 4/15/2023, 1:36:11 AM