MySQL => 事务、四个隔离级别

本文详细介绍了数据库事务的四个特性——原子性、一致性、隔离性和持久性,并重点讨论了不同隔离级别(读未提交、读已提交、可重复读、串行化)的特点及解决的问题,如脏读、不可重复读和幻读。通过理解这些概念,有助于更好地理解和处理并发事务中的数据一致性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

事务的四个特征(ACID)

隔离性:

四种隔离级别:  

定义(参考: https://developer.aliyun.com/article/746718):

1 - Read Uncommitted: 

2 - Read Committed(读提交) 

3 - Repeatable Read (可重复读)【MySQL的默认隔离级别】

4 - 串行化(Serializable)

隔离性要解决的问题:

脏读

可重复读

不可重复读

幻读



事务的四个特征(ACID)

  • Atomicity 原子性
  • Consistency 一致性
  • Isolation  隔离性
  • Durablitiy 持久性

隔离性:

四种隔离级别:  

  • Read Uncommitted ( 读未提交, 即 读到了未提交的数据)
  • Read Committed (读提交, 即 读到了提交的数据)
  • Repeatable Read(可重复读)【MySQL的默认隔离级别
  • Serializable (串行化)

定义(参考: https://developer.aliyun.com/article/746718):

1 - Read Uncommitted

读未提交, 即 所有事务都可以读到其他未提交事务的执行结果。  

               会引发脏读的问题, 读到了其他事务未提交的数据。

2 - Read Committed(读提交) 

即只能读到已提交的数据。 即 一个事务能可以立即看见已经提交事务所做的改变, 不会看见未提交事务所做的改变。

这种隔离级别可以解决 “脏读”的问题,即防止读到其他事务未提交的数据;但是会引发 不可重复读”的问题, 因为不可重复读指 一个事务中, 不同时刻,读到的数据可能不一样。

当隔离级别为 Read Committed时,一个事务中可以读到其他事务提交的结果, 其他事务提交前后, 本事务读到的数据不一致;

3 - Repeatable Read (可重复读)【MySQL的默认隔离级别

 可重复读是指, 一个事务内, 多次查询结果都是一致的,确保同一事务的多个实例(数据行)在并发读取时,会得到相同的结果。

本事务开启后,不会读到其他事务提交或修改的更新。

比如

如果是 Read Committed, 则事务A读到的结果是101, 而如果是 Repeatable Read, 则读到的是100, 因为事务A开始后,第一次读数据时读到的是100, 此时事务B还未提交, 即使事务B提交后, 事务A读到的扔是100。

这种隔离级别可以解决“不可重复读”, 但会引发“幻读” 的问题, 即 在这种隔离级别下,因为无法读到其他事务的操作,所以当事务B插入了新数据时,事务A是无法读到的, 当插入数据时,如果有唯一性主键约束,就会导致插入失败,如果没有约束,可能会导致产生两条数据。

4 - 串行化(Serializable)

最高的隔离级别。 这种隔离级别,强制事务排序,使之不会发生冲突,从而解决幻读的问题。但会引发性能问题。事务排序会导致性能下降。

隔离性要解决的问题:

脏读

 是指 读到了 其他事务未提交的数据。  未提交意味着数据这些数据可能会回滚,最终会有可能不存在数据库。

可重复读

可重复读是指,一个事务内, “最开始读到的数据”和 “事务结束前的任意时刻读到的同一批数据” 都是一致的。通常针对数据 更新(update)操作

不可重复读

对比可重复读, 不可重复读指的是 ,一个事务内,不同时刻读到的同一批数据可能不一样, 可能会受到其他事务的影响, 比如其他事务修改了这批数据并提交, 则前后读到的数据就是不一致的。通常也是针对 更新(update)操作;

幻读

幻读是针对 插入(INSERT)操作来说的。  

一个事务读到了另一个事务提交的数据;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值