【事务系列2】事务的隔离级别以及低隔离级别下的数据异常情况

本文介绍了在并发环境下,多个事务操作同一数据源时可能出现的脏读、不可重复读、幻读和丢失更新等数据异常情况。并详细解释了四种不同的事务隔离级别:ReadUncommitted、ReadCommitted、RepeatableRead以及Serializable,它们如何帮助解决这些问题。

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

简述

当多个事务在操作同一套数据源时,事务会彼此影响。根据这些事务之间的影响程度的不同,我们将其划分为多个隔离级别。隔离级别越低,事务所受到的限制就越低,性能相对会提高些,但是所造成的数据异常情况也相对多些。

数据异常

数据异常有以下几种情况:
(1)脏读:在事务A读取了事务B尚未提交的更新数据,此时事务B由于各种异常情况回滚了。

事务A事务B
X=100
更新X=200
读取x=200
发生错误,进行回滚
X错误

(2)不可重复读:无论其他事务是否提交,只要本事务都不曾提交,那么该事务下对同一笔数据的读取理应是一样的,否则则为不可重复读现象。

事务A事务B
X=100
X=100
写入X=200
X=200
X发生错误

(3)幻读:无论其他事务是否提交,本事务的查询都应该是一个相同的结果集。否则则为幻读。幻读更倾向于新增或者删除数据。

事务A事务B
查询列表[a,b,c]
插入d,并提交
查询列表[a,b,c,d]
X发生错误

(4)丢失更新

事务A事务B
X=100X=100
更新X=200
更新X=300
重新读取X X为300
发生错误

注意

这些隔离级别由低到高依次为:ReadUncommitted,ReadCommitted,Repeatable Read以及Serializable

一般来说,ReadCommitted用的比较多,之后则是Repeatable Read。

参考资料

什么是脏读,不可重复读,幻读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值