脏读 脏数据

脏读指一个事务读取其他事务正在更新的数据,如果第二个事务的更新过程尚未完成,则第一个事务所读取到的只是一个过程中的数据,而并非真实的数据。

脏数据在临时更新(脏读)中产生。事务A更新了某个数据项X,但是由于某种原因,事务A出现了问题,于是要把A回滚。但是在回滚之前,另一个事务B读取了数据项X的值(A更新后),A回滚了事务,数据项恢复了原值。事务B读取的就是数据项X的就是一个“临时”的值,就是脏数据。

 

MySQL中的脏读、虚读和幻读是事务隔离级别中可能出现的不同问题: 1. **脏读**[^1]:发生在并发环境中,一个事务看到另一个事务未提交的数据。如果事务A读取到了事务B未提交的更新,然后事务B回滚,那么事务A看到的数据就是错误的。脏读可以通过设置较低的事务隔离级别(如READ UNCOMMITTED)来减少,但会带来数据一致性风险。 2. **虚读**,又称为不可重复读,是指同一个事务内多次读取同一数据可能得到不同的结果,因为在此期间有其他事务对数据进行了修改。这通常是因为事务内部的第二次读取遇到了另一个事务的修改。为了解决这个问题,可以使用更高的事务隔离级别(如REPEATABLE READ),它会锁定数据直到事务结束,防止其他事务修改。 3. **幻读**:比虚读更严重,即使两次读取的是同一数据集,但由于事务间的插入或删除操作,导致新的数据行出现在第一次读取之后,看起来像是出现了新的数据。幻读无法通过简单的封锁机制解决,因为它涉及到数据的增删。解决幻读通常需要全局序列化,如采用Serializable隔离级别,或者使用行级锁定技术(如InnoDB的Next-Key Locking)。 这些隔离级别的选择会影响应用程序对于并发数据的一致性和可见性的预期。默认情况下,MySQL使用REPEATABLE READ隔离级别,以减少虚读和幻读的可能性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值