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事务隔离级别和锁机制(间隙锁、临建锁)相关推荐

  1. mysql事务隔离级别及传播机制

    TRANSACTION(事务隔离级别) 在说明事务隔离级别之前先说一下脏读.不可重复读.幻读这三个概念. 脏读:一个事务读取到另一事务未提交的更新新据.当一个事务正在访问数据,并且对数据进行了修改,而 ...

  2. MySQL锁、事务隔离级别、MVCC机制详解、间隙锁、死锁等

    一. 简介 1. 锁定义 锁是计算机协调多个进程或线程并发访问某一资源的机制. 在数据库中,除了传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供需要用户共享的资源.如何保证数据并 ...

  3. mysql 默认事务隔离级别_一文读懂MySQL的事务隔离级别及MVCC机制

    回顾前文: <一文学会MySQL的explain工具> <一文读懂MySQL的索引结构及查询优化> (同时再次强调,这几篇关于MySQL的探究都是基于5.7版本,相关总结与结论 ...

  4. mysql事务隔离级别之锁实现原理,脏读、不可重复读、幻读出现原因及解决方案

    mysql事务隔离级别原理 观看了很多网上的博客,挺令人伤心,很难找到想要的答案... 一:所需知识 1,mysql中的锁 1.1,读锁(共享锁) 规则:若事务1对数据对象A加上读锁,则事务1只能读A ...

  5. mysql 事务隔离级别实现原理_MySQL事务隔离级别和实现原理 - 米扑博客

    开发中经常提到数据库的事务,那你知道数据库还有事务隔离的说法吗, 事务隔离还有隔离级别,那什么是事务隔离,隔离级别又是什么呢? MySQL 事务 本文所说的 MySQL 事务都是指在 InnoDB 引 ...

  6. Mysql事务隔离级别及MVCC(多版本并发控制)

    一.MySQL事务隔离级别 先注明一点:以下讨论都是在多事务并发的情境下讨论的 事务的特性(InnoDB引擎才有事务): ACID 原子性:一个事务不可再分割,要么都执行要么都不执行 一致性:一个事务 ...

  7. Java提升篇-事务隔离级别和传播机制

    转载自 Java提升篇-事务隔离级别和传播机制 问题的提出 为了保证并发操作数据的正确性及一致性,SQL规范于1992年提出了数据库事务隔离级别. 事务隔离级别分类 事务隔离级别由低往高可分为以下几类 ...

  8. mysql 事务 隔离级别_MySQL的四种事务隔离级别

    https://www.cnblogs.com/huanongying/p/7021555.html 本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的 ...

  9. 揭秘Mysql事务隔离级别之可重复读

    揭秘Mysql事务隔离级别之可重复读 1.可重复读的来源 2.何为不可重复读 3.那么可重复读和不可重复读究竟有什么关系呢? 4.模拟不同事务隔离级别对不可重复的处理情况(有线程执行顺序). 4.1. ...

  10. mysql事务隔离级别 花_MySQL事务的隔离级别

    为什么要有事务? 当需要对一个数据表进行一系列多个操作的情况下,为了防止这些操作中一部分操作成功,而另一部分操作失败,从而导致数据不正确,我们就需要事务来控制了. 当两个人或者多个人同时操作同一条数据 ...

最新文章

  1. Java基础 - 面向对象 - 构造方法
  2. 解析列表中的数据python_将html数据解析成python列表进行操作
  3. 从近年CVPR看域自适应立体匹配
  4. 如何设置游戏分辨率(C++)
  5. 面试: 14 个实用的数据库设计技巧,一次性教给你!
  6. 【算法学习】线性时间排序-计数排序、基数排序和桶排序详解与编程实现
  7. SQL数据库每日自动备份
  8. 天正电气lisp是什么文件_天正电气——那些隐蔽却好用的功能
  9. Android视频媒体播放器
  10. 科里奥利质量流量计的4个检定方法
  11. 记一次小白调参baseline——NLP中文预训练模型泛化能力比赛
  12. 计算机可移动磁盘无法显示图片,移动硬盘显示不出来怎么办 移动硬盘不显示解决办法【详解】...
  13. MySql报错:unblock with mysqladmin flush-hosts
  14. 重启计算机按哪几个键,电脑快捷重启按什么键
  15. MySQL发生系统错误1067的解决方案
  16. 怎么让span与img在同一行
  17. 文字字体如何合适的运用到海报设计当中
  18. 单软多硬使用说明(展讯平台)
  19. c语言求素数500-1999,初等数论练习题
  20. 2013=10=19 ENGLISH 翻译

热门文章

  1. CDH下关于用户权限问题:Error while processing statement:xxxxxxThe directory must be owned by the submitte....
  2. C语言 负数对正数取余,负数取余/整除,Python和C语言的不同
  3. 前端笔记 -- 不重复造轮子(遇到就更新内容)
  4. Mac删除OBS的虚拟摄像头
  5. 愿守内心宁静,砥砺此生修行
  6. 小马哥-----高仿苹果6s plus刷机拆机主板型号Q39主板图与开机界面图 分版本
  7. Android解决Can't create handler inside thread that has not called Looper.prepare()
  8. 软件工程师能力自我评价表
  9. 老版本 linux 浮点,Linux-浮点运算
  10. 搭建java环境和java学习