异常与隔离级别
| 异常 | 说明 | READ COMMITTED | REPEATABLE READ | SERIALIZABLE |
|---|---|---|---|---|
| 脏读 | 读到别的事务未提交的数据 | 不会 | 不会 | 不会 |
| 不可重复读 | 同事务两次读同一行结果不同 | 可能出现 | 不会(快照一致) | 不会 |
| 幻读 | 同事务两次范围查询行数不同 | 可能出现 | 标准允许;MySQL InnoDB 快照读下不出现 | 不会 |
复现思路(PostgreSQL)
复现思路(PostgreSQL)
-- 会话 A
BEGIN ISOLATION LEVEL READ COMMITTED;
SELECT balance FROM accounts WHERE id = 1;
-- 会话 B 提交 UPDATE 后,A 再查同一行会看到新值
SELECT balance FROM accounts WHERE id = 1;
COMMIT;