在数据库事务处理中,**脏读(Dirty Read)是指一个事务读到了另一个事务尚未提交(uncommitted)**的数据,而后者随后可能回滚,导致前者读到的数据是“无效”的。
根本原因是:数据库的事务隔离级别设置得过低(通常是 READ UNCOMMITTED),或者系统为了追求高并发而允许读取未提交的数据。
具体说明如下:
数据库通常支持以下隔离级别(从低到高):
在 READ UNCOMMITTED 下,事务 A 可以读到事务 B 修改但还未提交的数据,从而出现脏读。
当一个事务在修改数据(如 UPDATE)但尚未提交时:
事务B:UPDATE account SET money = 0 WHERE id=1; (未提交)
事务A:SELECT money FROM account WHERE id=1; → 读到 0
事务B:ROLLBACK; (回滚,money 恢复为 100)
此时事务 A 读到的 0 就是脏读。
SELECT ... FOR UPDATE)如果你愿意,我也可以帮你对比“脏读 / 不可重复读 / 幻读”的区别。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。