MySQL加锁规则

秋招了,之前看过的MySQL的很多都已经记不清楚了,跟着小林的图解MySQL回顾一遍,记录一些。

先启动MySQL,然后创建如下的数据库:(tips:注意要通过管理员模式去运行MySQL)

创建事务A:

执行:select * from user where id = 1 for update;

此时通过执行:select * from performance_schema.data_locks\G;查看锁的信息,

此时会有两个锁,第一个锁是表级锁:

LOCK_TYPE是锁的级别,TABLE表示表级锁

LOCK_MODE是锁的类型,IX表示X型的意向锁

第二个锁:

LOCK_TYPE为RECORD,表示行级锁

LOCK_MODE为X,REC_NOT_GAP表示记录锁,

LOCK_DATA表示锁的范围,此时表示id为1的这一条记录。

那如果查询id不存在的情况呢?下面我们继续看:

执行:select * from user where id = 2 for update;

数据库响应:Empty set,表示不存在这条记录,

去查看事务的锁情况,如下:

LOCK_MODE为X,GAP,表示间隙锁

此时新开一个事务B,插入id=3的一条新的记录,会被阻塞

因为此时有间隙锁,范围是(1,5),也就是说右边界是LOCK_DATA的值,左边界是这条记录的上一条记录,也就是1.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值