2Mysql事务的隔离级别?

Posted 赤云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2Mysql事务的隔离级别?相关的知识,希望对你有一定的参考价值。

​ ACID:

​ 原子性:undo log(MVCC)

​ 一致性: 最核心和最本质的要求

​ 隔离性:锁,mvcc(多版本并发控制)

​ 持久性:redo log

​ 数据库的事务隔离级别有四种,分别是读未提交、读已提交、可重复读、序列化,不同的隔离级别下会产生脏读、幻读、不可重复读等相关问题,因此在选择隔离级别的时候要根据应用场景来决定,使用合适的隔离级别。

​ 各种隔离级别和数据库异常情况对应情况如下:

隔离级别 脏读 不可重复 读 幻读
READ- UNCOMMITTED
READ-COMMITTED ×
REPEATABLE- READ × ×
SERIALIZABLE × × ×

SQL 标准定义了四个隔离级别:

  • READ-UNCOMMITTED(读取未提交): 事务的修改,即使没有提交,对其他事务也都是可见的。事务能够读取未提交的数据,这种情况称为脏读。
  • READ-COMMITTED(读取已提交): 事务读取已提交的数据,大多数数据库的默认隔离级别。当一个事务在执行过程中,数据被另外一个事务修改,造成本次事务前后读取的信息不一样,这种情况称为不可重复读。
  • REPEATABLE-READ(可重复读): 这个级别是MySQL的默认隔离级别,它解决了脏读的问题,同时也保证了同一个事务多次读取同样的记录是一致的,但这个级别还是会出现幻读的情况。幻读是指当一个事务A读取某一个范围的数据时,另一个事务B在这个范围插入行,A事务再次读取这个范围的数据时,会产生幻读
  • SERIALIZABLE(可串行化): 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。

事务隔离机制的实现基于锁机制和并发调度。其中并发调度使用的是MVVC(多版本并发控制),通过保存修改的旧版本信息来支持并发一致性读和回滚等特性。

因为隔离级别越低,事务请求的锁越少,所以大部分数据库系统的隔离级别都是READ-COMMITTED(读取提交内容):,但是你要知道的是InnoDB 存储引擎默认使用 REPEATABLE-READ(可重读)并不会有任何性能损失。

以上是关于2Mysql事务的隔离级别?的主要内容,如果未能解决你的问题,请参考以下文章

事务的隔离级别是啥?

MySQL的默认事务隔离级别是?

如何更改mysql事务隔离级别

mysql 的事务隔离级别 及各个隔离级别应用场景,详细

Spring事务隔离级别:REQUIRES_NEW使用细节

数据库事务隔离级别 一般用哪个