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事务按照先后顺序执行,互相不影响,不存在可见性问题。最高的隔离级别,但失去了并发性。

相关推荐
人间打气筒(Ada)8 分钟前
MySQL优化
数据库·mysql
小蒜学长42 分钟前
医疗报销系统的设计与实现(代码+数据库+LW)
数据库·spring boot·学习·oracle·课程设计
终端行者1 小时前
kubernetes1.28部署mysql5.7主从同步,使用Nfs制作持久卷存储,适用于centos7/9操作系统,
数据库·容器·kubernetes
羊小猪~~1 小时前
MYSQL学习笔记(九):MYSQL表的“增删改查”
数据库·笔记·后端·sql·学习·mysql·考研
我们的五年1 小时前
MySQL 架构
数据库·mysql·开源
大地爱1 小时前
在Ubuntu 22.04 LTS 上安装 MySQL两种方式:在线方式和离线方式
mysql·ubuntu·adb
橘猫云计算机设计2 小时前
基于SSM的《计算机网络》题库管理系统(源码+lw+部署文档+讲解),源码可白嫖!
java·数据库·spring boot·后端·python·计算机网络·毕设
ok0602 小时前
oracle怎么创建定时任务
数据库·oracle
阿桢呀2 小时前
Redis实战篇《黑马点评》5
数据库·redis·缓存
33三 三like2 小时前
软件测试:1、单元测试
数据库·sqlserver·log4j