美文网首页
Mysql基于InnoDB的隔离级别

Mysql基于InnoDB的隔离级别

作者: 生不悔改 | 来源:发表于2022-06-19 04:47 被阅读0次

一、隔离级别的作用

当对同一行数据出现事务并发的时候,就需要用隔离级别去控制影响。隔离级别就是为了解决这块事务并发带来的数据一致性问题。

常见的问题:

1.脏读:一个事务读取到另一个事务还没有提交的事务内容。
举例:A事务将数据C从0改成1,但是事务还没有提交,这时候事务B读取数据C,理应读取到0,但是却读取到了1
理解:读到其他事务未提交的数据

2.不可重复读:一个事务两次重复读取同一条记录,由于这时候另一个事务更改了这条数据,导致第一个事务两次读取的数据不同。
例如:A事务读取数据C原始数据为0,这时候事务B修改数据C改成了1,并提交了事务,之后事务A再次读取C,发现C变成了1,同一个事务A前后两次读取数据C的内容却不一样
理解:读到其他事务已提交的数据

3.幻读:一个事务按照条件查询数据,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在了。
例如:A事务读取数据C,发现没有,准备插入,这时候B事务插入了一条数据,此时A事务再去读的时候,发现还是没有。
理解:读不到其他事务已经提交的数据

这三个问题中脏读问题是最严重的,

二、四种隔离级别的介绍

1.读未提交(Read uncommitted)
2.读已提交(Read committed)
3.可重复读(Repeatable read)
4.串行化(Serializable )

image.png

三、隔离级别的实现

事务的隔离性是通过:readview+ MVCC + undoLog + 锁 四种技术共同实现的。
Mysql的Innodb引擎

四、企业中如何选择mysql的隔离级别

mysql的默认数据库隔离级别是 Repeatable Read(可重复读)俗称RR,但是一般我们在使用的时候都会将数据库的隔离级别设置成 Read committed(读已提交)俗称RC 这种隔离级别,但是这是为什么呢?

如果使用RR隔离级别,出现的问题:

1.在RR隔离级别下,条件列未命中索引会锁表!而在RC隔离级别下,只锁行!

2.在RR隔离级别下,存在间隙锁,导致出现死锁的几率比RC大的多!

3.在RR隔离级别下,使用statement模式的binlog做主从同步会出现数据不一致现象!

这块网上有两篇文章说的很详细(强烈建议):
为什么MySQL选择Repeatable Read作为默认隔离级别?
项目开发中MySQL应该选择什么事务隔离级别?

补充:

Mysql的主从同步,其实是用binLog来做的,binLog是有三种模式的:
1.statement模式:记录sql,例如:update stu a=1 where id = 1;这种
2.row模式:记录某一行数据
3.mix:混合模式

相关文章

  • MySQL 各种锁理解总结

    该文章举例都是基于 InnoDB 可重复读(RR)隔离级别的,mysql 版本 8.0 根据加锁的范围,MySQL...

  • Mysql基于InnoDB的隔离级别

    一、隔离级别的作用 当对同一行数据出现事务并发的时候,就需要用隔离级别去控制影响。隔离级别就是为了解决这块事务并发...

  • mysql事务隔离级别的实现原理

    mysql事务隔离级别的实现原理 mysql innodb中的四种事务隔离级别[https://www.jians...

  • mysql的事务隔离级别

    mysql中一共有4种隔离级别(因为只有InnoDB引擎支持事务,所以也可以说是InnoDB的事务隔离级别) 隔离...

  • MySQL

    MySQL数据库的存储引擎InnoDB和MyIASM 以下都是以InnoDB,Mysql默认事务隔离级别为REPE...

  • Mysql的存储引擎

    Mysql的存储引擎 InnoDB InnoDB采用MVCC来支持高并发,并且实现了四个标准的隔离级别,其默认级别...

  • Mysql 隔离级别与锁的关系

    Innodb中的事务隔离级别和锁的关系MySQL加锁处理分析

  • Mysql 隔离性:4个隔离级别的区别

    MySQL的默认存储引擎 MySQL的默认存储引擎是InnoDB,默认的隔离级别是REPEATABLE READ(...

  • MySQL相关(一)——— 事务和锁

    事务的隔离级别和锁机制 【1】InnoDB 事务隔离级别和锁 【2】脏读、不可重复读、幻读 mysql 相关 常用...

  • Mysql 事务隔离级说明

    按照SQL:1992 事务隔离级别,InnoDB默认是可重复读的(REPEATABLE READ)。MySQL/I...

网友评论

      本文标题:Mysql基于InnoDB的隔离级别

      本文链接:https://www.haomeiwen.com/subject/xhxlvrtx.html