• 一、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

  • 相关阅读:
    linux各发行版的系统平台信息获取方式调研
    linux各发行版本的系统资源获取方式调研
    查看linux版本系统平台信息方法汇总
    《这么慢,那么美》------ 听见
    学习博客大集锦
    java 面试题及答案
    Java方向如何准备BAT技术面试答案(汇总版)
    java 虚拟机系列-java内存分配、类加载,垃圾回收机制算法
    java 基础概念
    linux 脚本学习--细节问题
  • 原文地址:https://www.cnblogs.com/lay2017/p/12230563.html
Copyright © 2020-2023  润新知