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

相关推荐
nongcunqq24 分钟前
abap 操作 excel
java·数据库·excel
rain bye bye1 小时前
calibre LVS 跑不起来 就将setup 的LVS Option connect下的 connect all nets by name 打开。
服务器·数据库·lvs
冻咸鱼1 小时前
MySQL的配置
mysql·配置
阿里云大数据AI技术2 小时前
云栖实录|MaxCompute全新升级:AI时代的原生数据仓库
大数据·数据库·云原生
不剪发的Tony老师3 小时前
Valentina Studio:一款跨平台的数据库管理工具
数据库·sql
weixin_307779133 小时前
在 Microsoft Azure 上部署 ClickHouse 数据仓库:托管服务与自行部署的全面指南
开发语言·数据库·数据仓库·云计算·azure
六元七角八分3 小时前
pom.xml
xml·数据库
虚行3 小时前
Mysql 数据同步中间件 对比
数据库·mysql·中间件
奥尔特星云大使3 小时前
mysql读写分离中间件Atlas安装部署及使用
数据库·mysql·中间件·读写分离·atlas
牛马baby4 小时前
【mysql】in 用到索引了吗?
数据库·mysql·in