zoukankan      html  css  js  c++  java
  • 一、innodb基本的行级锁和表级锁

    所有文章

    https://www.cnblogs.com/lay2017/p/12078232.html

    正文

    innodb是mysql在oltp模式中最常用的一种执行引擎。本文将了解一下innodb基础的行级锁和表级锁。

    首先,锁存在的理由是什么?是因为资源争抢,当多线程并发的时候,为了保证资源不被破坏,需要对资源的调用情况进行控制,比如该阻塞排队(互斥)的时候,该并行查询的时候(共享)。

    innodb主要分为两种锁模式

    1)行级锁,行级锁又再细分为

      1-1)共享锁,也称为S锁:S锁允许多个事务去读取同一行数据,阻止其它事务获得X锁更新同一行数据。简单来说,读读不互斥、读写互斥。

      1-2)排它锁,也称为X锁:只允许获得X锁的事务更新数据,阻止其它事务获取S锁和X锁,也就是不能读也不能更新。简单来说,读写互斥,写写互斥。

    2)表级锁,表级锁又再细分为

      2-1)意向共享锁,也称为IS锁:事务打算给数据行加S锁,就先取得表的IS锁。简单来说,就是先获取整张表的全局锁(IS),然后再给每条数据加行锁(S锁)。

      2-2)意向排它锁,也称为IX锁:事务打算给数据行加X锁,就先取得表的IX锁。简单来说,就是先获取整张表的全局锁(IX),然后再给每条数据加行锁(X锁)。

    行锁和表锁的兼容情况

      锁模式 互斥锁(X) 意向互斥锁(IX) 共享锁(S) 意向共享锁(IS)
    锁模式 是否兼容        
    互斥锁(X)   冲突 冲突 冲突 冲突
    意向互斥锁(IX)   冲突 兼容 冲突 兼容
    共享锁(S)   冲突 冲突 兼容 兼容
    意向共享锁(IS)   冲突 兼容 兼容 兼容

    如果一个事务请求的锁与当前的锁兼容,那么innodb就将请求的锁授予该事务。否则,就得等待锁的释放。

    总结

    innodb分为行级锁和表级锁。两者又再细分为了S锁、X锁和IS锁、IX锁,它们之间相互兼容情况如上表所示。

    参考链接:https://zhuanlan.zhihu.com/p/29150809

  • 相关阅读:
    什么是主从复制、读写分离、为什么要使用
    Swift 4.0 + Ipad开发项目中值得注意知识点
    Swift细节记录<一>
    ECMAScript 6复习<一>
    Swift4.0复习访问控制与作用域
    Swift4.0复习操作符方法与操作符的定制
    Swift4.0复习错误处理
    Swift4.0复习扩展
    Swift4.0复习泛型
    TCP的三次握手(建立连接)和四次挥手(关闭连接)
  • 原文地址:https://www.cnblogs.com/lay2017/p/12230563.html
Copyright © 2011-2022 走看看