MySQL四种隔离级别

MySQL的隔离级别是在事务这个大主题下面产生的说法。

那么什么是事务,事务就是一组sql语句,要么全部执行成功,要么都不执行,不能只执行成功其中的部分sql。事务的最终目的是为了保证数据库数据的完整性、一致性和可用性。

要保证数据库在并发情况下的数据完整性、一致性和可用性,事务需要满足如下4个特性,简称ACID:
A(Automicity) :原子性,事务中对数据库的所有修改要么全部完成,要么都全部回滚,不能一些执行成功,一些没有执行成功。
C(Consistency) :一致性,事务执行前后完整性约束不会受到破坏。付款和收款的两个账户,付款和收款的数额是一致的。
I(Isolation) :隔离性,不同事务之间互不影响。A事务执行过程中,数据的状态不受B事务的影响。
D(Duratbility) :持久性,事务在数据库中的修改最终会被保存,不会丢失。

为了达到事务的ACID标准,MySQL数据库有自己的一套实现机制。

为了保证原子性,MySQL数据库通过binlog+undo log的方式保证事务执行失败时可以回滚。

为了保证一致性,MySQL数据库定义了主键外键约束。

为了实现隔离性,MySQL针对不同隔离级别有不同的实现方式。

为了实现持久性,MySQL定义了两阶段提交、刷盘策略。

而隔离级别就是为了实现事务的隔离性而定义的,不同隔离级设置了事务不同的可见性,也就是一个正在执行的事务会在哪些阶段被其他事务识别,可见性影响到了其他事务的结果,不同的可见性会产生不同的影响。

隔离级别分为四种,

以下4种隔离级别均以同时执行的两个A、B两个事务作为例子。

1、读未提交,A事务中能够查询到B事务中没有提交的结果,因此A事务会读取到B事务没有提交的结果,产生脏读。

2、读已提交,A事务中只能等B事务提交后才能查到B事务执行的结果,A事务执行过程中读取到的结果可能会因为B事务提交而产生不同,产生不可重复读和幻读。

3、可重复读,A事务执行过程中查询到的结果不会因为B事务的执行而不同,A事务执行前后的数据都不受B事务的影响。MySQL实现中,可重复度的隔离级别解决了幻读的问题。

4、可串行化,A、B事务按照先后顺序执行,互相不影响,不存在可见性问题。最高的隔离级别,但失去了并发性。

相关推荐
盟接之桥31 分钟前
线束数字化--先进先出为什么总是停留在纸面上?
大数据·网络·数据库·人工智能·制造·ai编程
FYKJ_20101 小时前
springboot助农产品销售商城05829-计算机课程设计、毕业设计
java·spring boot·python·mysql·spark·django
Kamille Bidan1 小时前
MySQL数据库引擎介绍
mysql
adinnet20262 小时前
预算管控:预算执行与偏差问数
大数据·数据库
Omics Pro3 小时前
Cell封面|衰老生物学开源AI工具包
数据库·人工智能·算法·机器学习·自然语言处理
FYKJ_20104 小时前
springboot雅集社区养老管理系统04456-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django
FYKJ_20104 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
javascript·vue.js·spring boot·mysql·typescript·spark·express
FYKJ_20105 小时前
springboot羽毛球场地管理系统00626-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django
FYKJ_20106 小时前
django药饮个性化推荐系统54839-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django
IT枫斗者枫哥11 小时前
MyBatis一对多分页:LIMIT 20,为什么凑不齐20个订单?
java·数据库