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

相关推荐
MasterNeverDown28 分钟前
解决 PostgreSQL 中创建 TimescaleDB 扩展的字符串错误
数据库·postgresql·oracle
limts1 小时前
Oracle之开窗函数使用
数据库·oracle
拾荒的小海螺2 小时前
JAVA:Spring WebClient 的应用指南
java·数据库·spring
LuckyRich13 小时前
2024年博客之星主题创作|2024年度感想与新技术Redis学习
数据库·redis·缓存
重整旗鼓~3 小时前
4.flask-SQLAlchemy,表Model定义、增删查改操作
数据库·python·flask
咩咩大主教3 小时前
Go语言通过Casbin配合MySQL和Gorm实现RBAC访问控制模型
mysql·golang·鉴权·go语言·rbac·abac·casbin
PGCCC4 小时前
【PGCCC】PostgreSQL 中表级锁的剖析
数据库·postgresql·区块链
用户442006962334 小时前
大云海山数据库(He3DB)源码详解:He3DB-SimpleLruReadPage
数据库
小爬菜5 小时前
Django学习笔记(项目默认文件)-02
前端·数据库·笔记·python·学习·django
Deutsch.5 小时前
MySQL——主从同步
mysql·adb