InnoDB锁定模式

事务获取锁,以防止并发事务修改甚至读取某些行或行范围。这样做是为了确保并发写入操作不会冲突。

共享锁(S)和排他锁(X)

两种标准的行级锁是共享锁(S)和排他锁(X)

获取共享锁以读取行,并允许其他事务读取锁定的行,但不能写入锁定的行。其他事务也可能获取自己的共享锁。

获得排他锁以写入一行,并阻止其他事务锁定同一行。它的具体行为取决于隔离级别;默认值(REPEATABLE READ可重复读),允许其他事务从排他锁定的行读取。

意向锁

InnoDB还允许表锁定,并允许表和行级别的锁定优雅地共存,存在一系列称为意图锁的锁。

意向共享锁(IS)表示事务打算设置共享锁。

意向排他锁(IX)表示事务打算设置排他锁。

是否授予锁定可以总结如下:

  • 如果持有其他任何锁(X,S,IX,IS),则不授予X锁。
  • 如果持有X或IX锁,则不授予S锁。如果持有S或IS锁,则将授予此权限。
  • 如果持有X或S锁,则不授予IX锁。如果持有IX或IS锁,则将授予此权限。
  • 如果持有X锁,则不授予IS锁。如果持有S,IX或IS锁,则将授予此权限。

间隙锁

使用innodb_locks_unsafe_for_binlog的默认设置和默认隔离级别REPEATABLE READ,将使用一种称为间隙锁定的方法。当InnoDB在记录上设置共享或排他锁时,它实际上在索引记录上。记录将具有内部InnoDB索引,即使它们没有定义唯一索引也是如此。同时,在索引记录之前的间隙上保持了锁定,因此另一个事务无法在该记录与先前记录之间的间隙中插入新的索引记录。

间隙可以是一个索引值,也可以是多个索引值,或者根本不存在,这取决于索引的内容。如果一条语句使用唯一索引的所有列来搜索唯一行,则不使用间隙锁定。

类似于上述共享和排他意图锁,可以有多种类型的间隙锁。这些包括共享间隙锁,排他间隙锁,意图共享间隙锁和意图排他间隙锁。

如果设置了innodb_locks_unsafe_for_binlog系统变量,或者隔离级别设置为READ COMMITTED,则禁用间隙锁。

MariaDB InnoDB基本介绍的更多相关文章

  1. MySQL InnoDB Cluster介绍

    目录 一.MySQL InnoDB Cluster介绍 二.环境准备 三.将MGR节点加入MySQL Cluster 四.问题汇总 五.性能测试 六.个人总结 一.MySQL InnoDB Clust ...

  2. mariadb:InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes

    mariadb 启动中 InnoDB: Error: log file ./ib_logfile0 is of different size 0 起因:线上正在运行的系统,因为需要调整性能,变更了my ...

  3. MySQL InnoDB索引介绍以及在线添加索引实例分析

    引言:MySQL之所以能成为经典,不是没有道理的,B+树足矣! 一.索引概念 InnoDB引擎支持三种常见的索引:B+树索引,全文索引和(自适应)哈希索引.B+树索引是传统意义上的索引,构造类似二叉树 ...

  4. mariadb一些命令介绍及mariadb架构图和索引

    mariadb> SHOW GLOBAL VARIABLES; 全局变量影响服务器的全局操作 mariadb> SHOW [SESSION] VARIABLES; 客户端变量,只对当前会话 ...

  5. MariaDB · 版本特性 · MariaDB 的 GTID 介绍

    本文来自阿里的数据库内核月报,写的很详细,主要是关于mariadb开启gtid之后做主从的方法. 原文连接:http://mysql.taobao.org/monthly/2016/02/08/

  6. MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群)

    MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群)  OneAPM蓝海讯通7月3日 发布 推荐 4 推荐 收藏 14 收藏,1.1k 浏览 MariaDB 作为 ...

  7. MariaDB Galera Cluster 部署

    原文  http://code.oneapm.com/database/2015/07/02/mariadb-galera-cluster/MariaDB作为Mysql的一个分支,在开源项目中已经广泛 ...

  8. MariaDB Galera Cluster 部署(如何快速部署MariaDB集群)

    MariaDB Galera Cluster 部署(如何快速部署MariaDB集群) [日期:--] 来源:Linux社区 作者:Linux [字体:大 中 小] MariaDB作为Mysql的一个分 ...

  9. 私有云Mariadb集群搭建

    MariaDB作为Mysql的一个分支,在开源项目中已经广泛使用,例如大热的openstack,所以,为了保证服务的高可用性, 同时提高系统的负载能力,集群部署是必不可少的. MariaDB Gale ...

随机推荐

  1. C++的两种实例化方式

    C++中,类有两种实例化方式.一种是有new关键字,一种没有new关键字.那么,这两种实例化方式有什么区别呢? A a;//(1) a存在于栈上 A* a = new A();//(2) a存在于堆中 ...

  2. Linux:保证数据安全落盘

    背景 在很多IO场景中,我们经常需要确保数据已经安全的写到磁盘上,以便在系统宕机重启之后还能读到这些数据.但是我们都知道,linux系统的IO路径还是很复杂的,分为很多层,每一层都可能会有buffer ...

  3. 【C#表达式树 开篇】 Expression Tree - 动态语言

    .NET 3.5中新增的表达式树(Expression Tree)特性,第一次在.NET平台中引入了"逻辑即数据"的概念.也就是说,我们可以在代码里使用高级语言的形式编写一段逻辑, ...

  4. weblogic 升级bsu_Weblogic补丁升级之坑坑洼洼

    转至:https://blog.csdn.net/weixin_30682635/article/details/111911952 [概述] 虽然当前国内去IOE波涛汹涌,但不可否认OracleWe ...

  5. Python:numpy.ma模块

    翻译总结自:The numpy.ma module - NumPy v1.21 Manual 前言 ma是Mask的缩写,关于Mask的解释,如果有PS的基础,可以理解为蒙版,如果有计算机网络的基础, ...

  6. Vue el-date-picker 日期组件的使用

    一:显示年月 <el-date-picker v-model="selectMonth" type="month" placeholder="选 ...

  7. 在矩池云上复现 PaddleGAN 照片转油画风格教程

    我选用的是cuda10.1纯镜像 案例来自paddlepaddle官方PaddleGAN库中,可以查看 https://github.com/PaddlePaddle/PaddleGAN/ https ...

  8. 矩池云上如何修改cudnn版本

    修改与之前修改nvcc.cuda这些的原理是一样的. 国内镜像 https://mirrors.cloud.tencent.com/nvidia-machine-learning/ 检查系统版本 so ...

  9. insert一个表的数据到另外一个表

    insert into a(real_name,is_main,mobile,password,property_id,create_time) select linkman as real_name ...

  10. promise 理解与总结

    对Promise的理解 Promise是异步编程的一种解决方案,可以获取异步操作的消息,避免了地狱回调,它比传统的解决方案回调函数和事件更合理和更强大. 所谓Promise,简单说就是一个容器,里面保 ...