

新闻资讯
技术学院脏读是指事务A读取到事务B修改但未提交的数据,若B回滚则A读取结果错误;仅在Read Uncommitted隔离级别下发生,MySQL默认Repeatable Read故不出现;应提升至Read Committed或更高隔离级别避免。
脏读,就是事务A读到了事务B改过但还没提交的数据。如果B后来回滚了,A读到的就完全是错的——这笔数据根本没真正发生过。
它只会在最低的隔离级别下出现:Read Uncommitted(读未提交)。MySQL 默认是 Repeatable Read,所以默认不会脏读;但一旦显式设成 Read Uncommitted,就打开了这个风险口。
假设账户表有一条记录:id=1, balance=100。
BEGIN; UPDATE account SET balance = 80 WHERE id = 1;(不提交)SELECT balance FROM account WHER
E id = 1; → 返回 80
ROLLBACK; → 余额实际仍是 100它破坏的是“读一致性”底线:读操作不该依赖随时可能消失的临时状态。
最直接有效的方式是提升事务隔离级别:
SELECT ... FOR UPDATE 或锁来防脏读——那是治标,改隔离级别才是治本