首页/数据/SQL 速查/并发异常:脏读、不可重复读、幻读
变更与事务52 条

并发异常:脏读、不可重复读、幻读

三类典型并发异常与隔离级别的对应关系:级别越高异常越少,但冲突与重试成本上升。

SQL 速查数据更新于 2026-10-12

异常与隔离级别

异常说明READ COMMITTEDREPEATABLE READSERIALIZABLE
脏读读到别的事务未提交的数据不会不会不会
不可重复读同事务两次读同一行结果不同可能出现不会(快照一致)不会
幻读同事务两次范围查询行数不同可能出现标准允许;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;

易错点

  • 只在应用层做“先查后判断”而不依赖数据库约束/锁,任何隔离级别都挡不住写偏斜类异常
  • 把隔离级别调高后忘记处理重试与死锁,会以另一种形式(报错率)暴露问题

数据来源与参考

  • MySQL 8.0 Reference Manual · Transaction Isolation Levels
  • PostgreSQL Documentation · Transaction Isolation
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌