02 数据库事务的隔离级别?

vvEcho 2024-01-20 14:08:37
Categories: Tags:

数据库的隔离级别分为读未提交,读已提交,可重复度,可重复读,串行化来分别解决脏读,不可重复读,幻读等问题

脏读(Dirty Read)

概念:一个事务读取了另一个未提交事务修改的数据(当前是读未提交隔离级别)
背景:事务A修改数据但未提交,事务B却读到了这个未提交的数据。若事务A最终回滚,事务B的读取结果就是无效的“脏数据”。
解决方案:

读已提交(Read Committed)隔离级别,确保只能读取已提交的数据。

不可重复读(Non-repeatable Read)

概念:同一事务中,多次读取同一数据结果不同,因其他事务已提交修改。

背景:事务A多次读取同一数据,期间事务B修改并提交该数据,导致事务A前后结果不一致。

解决方案:

可重复读(Repeatable Read)隔离级别,通过行锁或MVCC快照保证事务内多次读取一致。

幻读(Phantom Read)

概念:同一事务中,多次按相同条件查询,结果集的行数不同(新增或删除行)。

背景:事务A读取某个范围的数据,事务B插入或删除符合该范围的数据并提交,导致事务A出现“幻觉”。

解决方案:

序列化(Serializable)隔离级别,或通过间隙锁(Gap Lock)锁定范围,禁止其他事务插入/删除