Mysql事务隔离级别和锁机制(间隙锁、临建锁)
MySql 事务
ACID
- 原子性
- 一致性
- 隔离性
- 持久性
并发事务带来的问题
- 脏读
- 事务A读取到了事务B已经修改但尚未提交的数据
- 不可重复读
- 事务A内部的相同查询语句在不同时刻读出的结果不一致,不符合隔离性
- 幻读
- 事务A读取到了事务B提交的新增数据,不符合隔离性
MySql 隔离级别
查看事务隔离级别: show variables like ‘tx_isolation’;
mysql 默认隔离级别是
可重复读
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交 | 可能 | 可能 | 可能 |
读提交 | 不可能 | 可能 | 可能 |
可重复度 | 不可能 | 不可能 | 可能 |
可串行化 | 不可能 | 不可能 | 不可能 |
MySql 锁机制
锁分类
- 性能上
- 乐观锁
- 悲观锁
- 操作类型
- 读锁(共享锁,S锁(Shared))
- 写锁(排它锁,X锁(eXclusive))
- 操作粒度
- 表锁
- 行锁
表锁
每次操作锁住一整张表,开销小, 加锁块, 锁粒度大,发生锁冲突概率大, 并发度低;
意向锁(Intention Locks)
意向锁是有数据引擎自己维护的,用户无法手动操作意向锁,
在为数据行加共享 / 排他锁之前,InooDB 会先获取该数据行所在在数据表的对应意向锁。
意向锁之间不排斥,但除了 IS 与 S 兼容外,
意向锁会与 (表级) 共享锁 / 排他锁 互斥
。意向锁是表级锁, 不会和行级锁发生冲突,指挥和表级锁发生冲突
- 意向共享锁(intention shared lock, IS)
- 意向排他锁(intention exclusive lock, IX)
行锁(innodb
)
行锁依赖于索引,如果没有使用到索引, 就会退化为表锁
记录锁
存在于包括
主键索引
在内的唯一索引
中,锁定单条索引记录。间隙锁
存在于
非唯一索引
中,锁定开区间
范围内的一段间隔,它是基于临键锁实现的。临建锁
存在于
非唯一索引
中,该类型的每条记录的索引上都存在这种锁,它是一种特殊的间隙锁,锁定一段左开右闭
的索引区间。
要点:
间隙锁、临建锁在一定范围内解决了
幻读
的问题在根据
非唯一索引
对记录行进行UPDATE\FOR UPDATE\LOCK IN SHARE MODE
操作时,InnoDB 会获取该记录行的临键锁
,并同时获取该记录行下一个区间的间隙锁
。区间操作时, 会在区间范围内加上临建锁(
左开右闭
)
Mysql事务隔离级别和锁机制(间隙锁、临建锁)相关推荐
- mysql事务隔离级别及传播机制
TRANSACTION(事务隔离级别) 在说明事务隔离级别之前先说一下脏读.不可重复读.幻读这三个概念. 脏读:一个事务读取到另一事务未提交的更新新据.当一个事务正在访问数据,并且对数据进行了修改,而 ...
- MySQL锁、事务隔离级别、MVCC机制详解、间隙锁、死锁等
一. 简介 1. 锁定义 锁是计算机协调多个进程或线程并发访问某一资源的机制. 在数据库中,除了传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供需要用户共享的资源.如何保证数据并 ...
- mysql 默认事务隔离级别_一文读懂MySQL的事务隔离级别及MVCC机制
回顾前文: <一文学会MySQL的explain工具> <一文读懂MySQL的索引结构及查询优化> (同时再次强调,这几篇关于MySQL的探究都是基于5.7版本,相关总结与结论 ...
- mysql事务隔离级别之锁实现原理,脏读、不可重复读、幻读出现原因及解决方案
mysql事务隔离级别原理 观看了很多网上的博客,挺令人伤心,很难找到想要的答案... 一:所需知识 1,mysql中的锁 1.1,读锁(共享锁) 规则:若事务1对数据对象A加上读锁,则事务1只能读A ...
- mysql 事务隔离级别实现原理_MySQL事务隔离级别和实现原理 - 米扑博客
开发中经常提到数据库的事务,那你知道数据库还有事务隔离的说法吗, 事务隔离还有隔离级别,那什么是事务隔离,隔离级别又是什么呢? MySQL 事务 本文所说的 MySQL 事务都是指在 InnoDB 引 ...
- Mysql事务隔离级别及MVCC(多版本并发控制)
一.MySQL事务隔离级别 先注明一点:以下讨论都是在多事务并发的情境下讨论的 事务的特性(InnoDB引擎才有事务): ACID 原子性:一个事务不可再分割,要么都执行要么都不执行 一致性:一个事务 ...
- Java提升篇-事务隔离级别和传播机制
转载自 Java提升篇-事务隔离级别和传播机制 问题的提出 为了保证并发操作数据的正确性及一致性,SQL规范于1992年提出了数据库事务隔离级别. 事务隔离级别分类 事务隔离级别由低往高可分为以下几类 ...
- mysql 事务 隔离级别_MySQL的四种事务隔离级别
https://www.cnblogs.com/huanongying/p/7021555.html 本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的 ...
- 揭秘Mysql事务隔离级别之可重复读
揭秘Mysql事务隔离级别之可重复读 1.可重复读的来源 2.何为不可重复读 3.那么可重复读和不可重复读究竟有什么关系呢? 4.模拟不同事务隔离级别对不可重复的处理情况(有线程执行顺序). 4.1. ...
- mysql事务隔离级别 花_MySQL事务的隔离级别
为什么要有事务? 当需要对一个数据表进行一系列多个操作的情况下,为了防止这些操作中一部分操作成功,而另一部分操作失败,从而导致数据不正确,我们就需要事务来控制了. 当两个人或者多个人同时操作同一条数据 ...
最新文章
- Java基础 - 面向对象 - 构造方法
- 解析列表中的数据python_将html数据解析成python列表进行操作
- 从近年CVPR看域自适应立体匹配
- 如何设置游戏分辨率(C++)
- 面试: 14 个实用的数据库设计技巧,一次性教给你!
- 【算法学习】线性时间排序-计数排序、基数排序和桶排序详解与编程实现
- SQL数据库每日自动备份
- 天正电气lisp是什么文件_天正电气——那些隐蔽却好用的功能
- Android视频媒体播放器
- 科里奥利质量流量计的4个检定方法
- 记一次小白调参baseline——NLP中文预训练模型泛化能力比赛
- 计算机可移动磁盘无法显示图片,移动硬盘显示不出来怎么办 移动硬盘不显示解决办法【详解】...
- MySql报错:unblock with mysqladmin flush-hosts
- 重启计算机按哪几个键,电脑快捷重启按什么键
- MySQL发生系统错误1067的解决方案
- 怎么让span与img在同一行
- 文字字体如何合适的运用到海报设计当中
- 单软多硬使用说明(展讯平台)
- c语言求素数500-1999,初等数论练习题
- 2013=10=19 ENGLISH 翻译
热门文章
- CDH下关于用户权限问题:Error while processing statement:xxxxxxThe directory must be owned by the submitte....
- C语言 负数对正数取余,负数取余/整除,Python和C语言的不同
- 前端笔记 -- 不重复造轮子(遇到就更新内容)
- Mac删除OBS的虚拟摄像头
- 愿守内心宁静,砥砺此生修行
- 小马哥-----高仿苹果6s plus刷机拆机主板型号Q39主板图与开机界面图 分版本
- Android解决Can't create handler inside thread that has not called Looper.prepare()
- 软件工程师能力自我评价表
- 老版本 linux 浮点,Linux-浮点运算
- 搭建java环境和java学习