zoukankan      html  css  js  c++  java
  • 5.7-mysql不同隔离级别下执行sql的上锁情况-building

    READ-COMMITTED级别

    update where 条件为(聚簇索引 或者 普通索引 或者 非索引字段)

    只会对加锁,此时没有gap锁(从information_schema.innodb_locks里查找锁信息时,显示的lock type是record)。即使where后面是范围条件也只对存在的行加锁。根源上是锁聚簇索引(主键)。

    REPEATABLE READ级别

    update where 条件为 非索引字段

    因为此隔离级别存在gap锁,将会对全表上next-key锁。全表上锁,在所有主键上加锁,同时在所有主键的间隙中加锁!再强调一遍。

    update where 非索引字段='表中不存在的值'

    也会导致全表上next-key锁。

    但是如果条件是主键字段又会发生什么呢?

     update where 主键 = ?

    只会对符合条件的行加锁。没有gap。那执行不等于呢?

    update where 主键 !=

    恭喜,没有任何数据被锁。

    update where 主键 范围条件

    此种情况下,也只对符合条件的主键和间隙加锁。

    如果是非索引字段和普通索引字段或者唯一索引字段呢?我以后慢慢补全吧,生产环境一般都是READ-COMMITTED级别吧。

    总结:在rr级别下要小心。

  • 相关阅读:
    非递归前序遍历,效率高 和 中序遍历代码都相似
    递归-变量-堆栈-透彻理解
    Linux 进程管理
    5linux引导流程解析
    Linux 软件包管理
    vim
    Linux常用命令
    Linux 系统安装
    linux 应用和发展
    贴图、纹理、材质的区别是什么? 还有shader
  • 原文地址:https://www.cnblogs.com/coolgame/p/12118736.html
Copyright © 2011-2022 走看看