mysql 锁_MySQL锁类型(MySQL系列一)

mysql innodb 引擎,锁类型分为:共享锁(S锁)、排它锁(X锁)、意向锁、记录锁(行锁)、间隙锁、临键锁(Next-Key Locks)、自增锁(AUTO-INC Locks)。

其中共享锁、排它锁、记录锁都是行级锁(row-level)。

1、共享锁:允许持有该锁的事务读取一行。 共享的意思是:如果有一个事务持有某一行的S锁,其他的事务也可以获取该S锁。但是不允许其他锁获得该行的X锁。

2、排它锁:允许持有该锁的事务更新和删除行。排它的意思是:如果有一个事务持有某一行的X锁,其他的事务不能获取改行的X锁和S锁,除非等到另外一个事务释放X锁。

3、意向锁:意向锁是表级别的锁,mysql有两种意向锁:意向共享锁(IS) 意向排它锁(IX)。

意向锁遵循两个规则,在事务可以获取表中某行的共享锁之前,它必须首先获取该表中的IS锁或更强的锁;在事务可以获取表中某行的排它锁之前,它必须首先获取该表中的IX锁。

简单描述为:事务获取S锁、X锁前,必须获取IS或者IX锁。

多个事务竞争同一个锁的时候遵循如下规则:

如果一个锁与现有锁兼容,则将其授予请求的事务,但如果与现有锁冲突,则不授予该锁,直到冲突的现有锁被释放。各种锁之间是否冲突参见下表

ab1ac99d816a6498c0410409597ad34d.png

XIXSISXConflictConflictConflictConflictIXConflictCompatibleConflictCompatibleSConflictConflictCompatibleCompatibleISConflictCompatibleCompatibleCompatible

4、记录锁(行锁):该锁加在索引所在的记录,但是锁住的是索引列。例如, SELECT c1 FROM t WHERE c1 = 10 FOR UPDATE; 他阻止其他事务inserting, updating, or deleting 在 t.c1 等于 10时,锁住的是c=10这个值。

5、间隙锁:间隙锁是对索引记录之间的间隙的锁定,或者是对第一个或最后一个索引记录之前的间隙的锁定,例如:SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR UPDATE。防止其他事务将值15插入到t.c1列中,无论该列中是否已有这样的值,因为该范围中所有现有值之间的间隙是锁定的。

间隙锁在RR隔离级别下生效,在RC隔离级别下不生效。

6、临键锁:临键锁是记录锁和间隙锁的组合锁。

a7bee58d4d7cdb197dfd77afb57b9113.png

以上仅为个人见解,如果有错误欢迎指出,喜欢的话可以点赞收藏评论转发,后续会继续推出MySQL系列文章。

转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值