InnoDB中不同SQL加锁类型

前言

上一篇博客中我们分析了事务死锁过程,给出的结论是其中delete操作和insert操作分别加了gap lock和insert intention lock,但具体什么sql会加什么锁呢?我们本篇来分析下

不同SQL加锁类型

1、检索的时候使用辅助索引会给索引到的相关行设置排他锁,同时InnoDB会给关联的聚簇索引相关行设置排他锁
2、如果检索时没有使用索引,那么InnoDB会对表里的每一行加上next-key lock,此时禁止插入
3、select from在 [SERIALIZABLE]隔离级别下回给检索到的行加上共享的next-key lock
4、select for update或者select lock in share mode会给检索到的行加next-key lock,特殊情况是where条件里的索引是唯一索引并且检索的是唯一行只会加行锁
5、update where 会给检索到的行加next-key lock,特殊情况是where条件使用唯一索引检索唯一行只会加行锁
6、update修改聚簇索引记录,比如修改主键,会给当前行关联的辅助索引加上锁;
7、delete from where 会给检索到的行加next-key lock,特殊情况是使用唯一索引检索唯一行只会加行锁
8、insert操作会给插入的行加行锁,在插入之前会设置插入意向锁的gap lock,多个事务如果插入不同行插入意向锁不会阻塞事务
9、replace操作和insert一致,但是如果要替换的唯一索引已经存在,那么就会加next-key lock
10、insert into T seelct from s where 会设置行锁,

总结

上述是从官方文档(https://dev.mysql.com/doc/refman/5.7/en/innodb-locks-set.html)摘录的比较常用的sql。
总结起来看就是update delete 操作会加next-key lock,insert多了一种插入意向锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值