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

  • 相关阅读:
    AM3715/DM3730 更改内存大小后kernel boot不起来的解决办法
    xslt转换xml文档&&xslt call java方法
    VSCode 运行go test显示打印日志
    tomcat作为windows服务的参数配置,特别是PermSize的设置
    高亮显示web页表格行
    深入分析 Java 中的中文编码问题
    webwork和spring多配置文件的方法
    Bug笔记:诡异的$.ajax
    C#多态
    委托的本质
  • 原文地址:https://www.cnblogs.com/lay2017/p/12230563.html
Copyright © 2011-2022 走看看