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. Wireshark教程之界面介绍

    实验目的 1.工具介绍 2.主要应用 实验原理 1.网络管理员用来解决网络问题 2.网络安全工程师用来检测安全隐患 3.开发人员用来测试执行情况 4.学习网络协议 实验内容 1.菜单栏选项介绍 2.快 ...

  2. [旧][Android] Retrofit 源码分析之 ServiceMethod 对象

    备注 原发表于2016.05.03,资料已过时,仅作备份,谨慎参考 前言 大家好,我又来学习 Retrofit 了,可能这是最后一篇关于 Retrofit 框架的文章了.我发现源码分析这回事,当时看明 ...

  3. 基于mysql的报表工具有哪些?值得推荐的mysql报表工具

    什么是SQL?SQL是结构化查询语言. 什么是数据库?数据库是用来存储数据的. 什么是mysql?Mysql是目前较为流行的数据库. 基于mysql的报表工具有哪些? 其实现在所有的报表工具,基本都支 ...

  4. IDE 、SDK 、API区别、库、框架、组件、CLI

    IDE:集成开发环境:包括代码编辑器.代码检测.代码调试器.译器/解释器.以及其他工具 SDK:SDK是IDE的基础引擎 ,比IDE更基本,因为它通常没有图形工具.工程师为辅助开发某类软件的相关文档. ...

  5. .Net 新一代编译器 Roslyn 会带来怎样的影响?

    .Net 新一代编译器 Roslyn 会带来怎样的影响? Roslyn是微软创建的一个.NET编译器平台,该项目于2014年4月3日开源. 最初 C# 语言的编译器是用 C++ 编写的,后来微软推出了 ...

  6. Linux下搭建iSCSI共享存储

    转至:https://www.linuxidc.com/Linux/2016-09/135655.htm Linux下搭建iSCSI共享存储 拓扑: 实验步骤: ------------------- ...

  7. 洛谷P4322.最佳团体

    题目大意 一个 \(n(1\leq n\leq 2500)\) 个节点的森林,每个点 \(i\) 有权值 \(s_{i},p_{i}(0<s_{i},p_{i}\leq 10^4)\) 以及父亲 ...

  8. omnet++:使用教程

    学习自:(6条消息) omnet++ 快速入门 | 计算机网络仿真 | omnet++ 入门教程_叶局长的博客-CSDN博客 1.使用omnet仿真的一般步骤 主要有3步: 使用ned(network ...

  9. 『现学现忘』Docker基础 — 9、Docker简介

    目录 1.什么是Docker? 2.Docker的出现解决了什么问题? 3.Docker的特别之处 4.Docker相关网站 1.什么是Docker? 2010年dotCloud公司在旧金山成立,PA ...

  10. TP5实现多文件上传及展示

    view层上传: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...