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级别下要小心。

  • 相关阅读:
    Extjs面板和布局初探
    XAMPP下apache部署网站,多个虚拟机(空间)配置
    安全配置织梦系统初探参考[转载]
    windows系统如何真正隐藏文件夹[转载]
    Siamese-RPN论文阅读
    线段树求和
    算法要点随记
    map使用示例
    算法准备之c++ sort使用示例
    编程要点随记
  • 原文地址:https://www.cnblogs.com/coolgame/p/12118736.html
Copyright © 2011-2022 走看看