MySQL隔离级别

本文介绍了数据库的四种事务隔离级别:读未提交、读已提交、可重复读和可串行化,以及它们对脏读、不可重复读和幻读的处理。在可重复读级别中,通过Next-Key Lock和MVCC机制解决了幻读问题。幻读是指在事务中两次读取数据不一致,由于其他事务插入了新记录导致。提高事务隔离级别可以避免这类问题,但可能牺牲并发性能。
摘要由CSDN通过智能技术生成

1.读未提交:
隔离级别最低。脏读,幻读,不可重复读都有可能发生。但性能高
2.读已提交:
它保证了事务不会出现中间状态的数据,所有数据都是已提交且更新的,解决了脏读的问题。但读已提交级别依旧很低,它允许事务间可并发修改数据,所以不保证再次读取时能得到同样的数据,也就是还会存在不可重复读、幻读的可能。
3.可重复读:
MySQL InnoDB 引擎的默认隔离级别,保证同一个事务中多次读取数据的一致性,解决脏读和不可重复读,幻读在本身隔离级别无法解决,通过next key lock和MVCC机制来解决.
4.可串行化
不会出现任何问题。 事务 A 操作数据库时,事务 B 只能排队等待,因此性能也最低。


脏读: 读到了未提交事务的数据。事务A对数据进行了修改,此时恰好事务B读取修改后了的数据,单数接着事务A发生了回滚,B读到了数据库以外的数据,就是脏读
不可重复读:事务 A 先读取一条数据,然后执行逻辑的过程中,事务 B 更新了这条数据,事务 A 再读取时,发现数据不匹配,这个现象就是“不可重复读”。
不可重复读的解决办法就是升级事务隔离级别,比如“可重复读”。

幻读:幻读指的是一个事务在进行一次查询之后发现某个记录不存在,然后会根据这个结果进行下一步操作,此时如果另一个事务成功插入了该记录,那么对于第一个事务而言,其进行下一步操作(比如插入该记录)的时候很可能会报错。从事务使用的角度来看,在检查一条记录不存在之后,其进行插入应该完全没问题的,但是这里却抛出主键冲突的异常。
eg: 简单来说:事务A的两次读之间有其他事务写操作,比如事务A统计年龄 > 30,当A两次读数据之间其他事务新添加了记录,所以事务A第二次读取到的数据突然多了一个,仿佛出现了幻觉一般,这就是一种幻读

使用 ID 做判断或做关键数据时,就会出现问题,这种现象就像是让事务 B 产生了幻觉一样,读取到了一个意想不到的数据,所以叫幻读。当然,不仅仅是新增,删除、修改数据也会发生类似的情况。
解决幻读不能使用可串行操作,那样数据库就失去了并发的功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值