美文网首页
InnoDB中不同SQL加锁类型

InnoDB中不同SQL加锁类型

作者: 后厂村老司机 | 来源:发表于2021-06-30 10:58 被阅读0次

前言

上一篇博客中我们分析了事务死锁过程,给出的结论是其中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多了一种插入意向锁

相关文章

  • InnoDB中不同SQL加锁类型

    前言 上一篇博客中我们分析了事务死锁过程,给出的结论是其中delete操作和insert操作分别加了gap loc...

  • MYSQL 5.7 InnoDB引擎 锁机制

    全文主要内容 MYSQL InnoDB引擎的锁类型以及特点 不同SQL语句的加锁情况 锁之间的兼容性关系 死锁发现...

  • MySQL的事务隔离级别和锁机制

    1、innodb锁机制: 原理:不是对记录加锁,是对索引加锁,如果sql没走上索引,则锁全表 不走索引的情...

  • Mysql innodb SQL语句加锁方式

    mysql innodb存储引擎支持事务,是mysql的默认存储引擎。 数据库事务 事务是由一组sql语句组成的逻...

  • MySQL加锁理解

    1、背景在工作过程中,时不时会有一些开发童鞋咨询MySQL/InnoDB的加锁分析处理。对于一条SQL语句,Inn...

  • Innodb加锁信息查看

    Innodb加锁分析时,需要查看当前加锁情况 使用命令行 开启NNODB监控机制(InnoDB Monitors)...

  • (25)行锁实现

    行锁在 InnoDB 中基于索引实现,如加锁没用索引,退化为表锁 概要:2 相同索引,访问不同行,锁冲突 ...

  • MySQL存储引擎之概览

    1 MySQL存储引擎简介 存储引擎是MySQL用于处理不同表类型的SQL操作的组件。 InnoDB是默认的也是最...

  • Mysql 隔离级别与锁的关系

    Innodb中的事务隔离级别和锁的关系MySQL加锁处理分析

  • MySQL加锁分析 一

    MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。本文,准备就MySQL/InnoDB的加锁问题,展开...

网友评论

      本文标题:InnoDB中不同SQL加锁类型

      本文链接:https://www.haomeiwen.com/subject/rmzlultx.html