MySQL 中的 脏读(Dirty Read)、不可重复读(Non-Repeatable Read)、可重复读(Repeatable Read) 是事务隔离级别中的核心概念,用于描述不同隔离级别下可能出现的并发问题。以下是详细解释:
1. 脏读(Dirty Read)
-
定义:一个事务(A)读取了另一个未提交事务(B)修改的数据。如果事务 B 回滚,事务 A 读取到的数据就是“脏数据”。
-
发生条件:事务隔离级别为 读未提交(Read Uncommitted)。
-
示例:
sql
复制
-- 事务A(未提交) UPDATE users SET balance = 200 WHERE id = 1; -- 事务B(读取未提交的数据) SELECT balance FROM users WHERE id = 1; -- 读到200 -- 事务A回滚 ROLLBACK;
事务 B 读到的
200
是未提交的临时值,最终失效。
2. 不可重复读(Non-Repeatable Read)
-
定义:同一事务内多次读取同一数据,结果不一致(因其他事务修改并提交了