事务的隔离级别

本文详细介绍了数据库中的并发问题,包括脏读、不可重复读和幻读,并逐一解析了四种事务隔离级别:未提交读、提交读、可重复读和序列化。每个级别都通过实例说明了其可能导致的问题及解决方案,揭示了事务管理和并发控制在数据库系统中的重要性。

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

一、并发问题

1、脏读

事务T1正在操作一条数据,此时事务T2获取该条数据纪录,如果T1异常,事务回滚,T2读取到的数据就是脏数据,这种现象称为脏读。

2、不可重复读

事务T1多次读取某条记录,在读取间隔中,事务T2更新了该技术的数据,当T1再次读取该记录时,获取到的数据不一致,这种现象称为不可重复读。产生的原因主要是数据的更新

3、幻读

事务T1批量处理条记录,此时事务T2新增或删除了一条或多条记录,当T1处理完成,查询处理结果,会发现有记录没有处理(T2新增的)或者发现记录少了(T2删除的),会有一种幻觉的感觉,这种现象称为幻读。主要是数据的新增或删除导致

二、隔离级别

1、未提交读(Read uncommitted)

①定义:就是一个事务读取到其他事务未提交的数据,是级别最低的隔离机制。

②缺点:会产生脏读、不可重复读、幻读。

③案例解读:以前交易所炒股的时候,股民老王购买了5000股,操作员操作录入(此时开启事务),操作时手误,多输入了一个0,数据保存但是未提交。此时老王查询自己的持股信息,发现自己居然有50000股,瞬间血压升高,昏倒在地。然后操作员发现自己录入错误,修改成正确的信息,录入完成(事务结束)。老王被救醒后,哆嗦这查询自己的持股,发现只有5000,没有增减,他之前看到的就是脏读数据。

④解决方案:采用更高级的隔离机制,如提交读。

2、提交读(Read committed)

①定义:就是一个事务读取到其他事务提交后的数据。Oracle默认隔离级别

②缺点:会产生不可重复读、幻读。

③案例解读:股市升高后,老王查看自己持有5000股,就想卖掉4000股,在老王卖股票的时候,老王的老婆看股市太高,就登录老王的账号,卖掉3000股。当老王想卖股票时,发现自己只有2000股,不是之前看到的5000股,这就是不可重复读问题。

④解决方案:采用更高级的隔离机制,如可重复读。

3、可重复读(Repeatable read)

①定义:就是一个事务对同一份数据读取到的相同,不在乎其他事务对数据的修改。MySQL默认的隔离级别

②缺点:会产生幻读

③问题解读:股市忽涨忽跌,老王焦虑不安,按捺不住,想把持有的多种股票全部抛掉。与此同时,老外老婆听信砖家所言,使用老王的账号买了某只神股。老王抛掉所有股票后,查看自己的持股,猛然发现自己居然还持有一只股票,瞬间觉得一脸懵逼,这就是幻读导致。

④解决方案:采用更高级的隔离机制,序列化。

4、序列化(Serializable)

①定义:事务串行化执行,隔离级别最高,牺牲了系统的并发性。

②缺点:可以解决并发事务的所有问题。但是效率地下,消耗数据库性能,一般不使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值