并发事务的问题与隔离级别

发布时间:2026/10/14 20:28:17
并发事务的问题与隔离级别
一、并发事务带来的问题并发事务如果不加控制会带来四类问题从轻到重分别是脏读、不可重复读、幻读1、脏读读到了别的事务还没提交的数据。事务 A把余额 100 → 200未提交事务 B读余额读到 200事务 A回滚余额变回 100事务 B 读到的 200 是从未真正生效过的数据基于它做的判断可能是错的。危害读到脏数据最终这个值不存在。2、不可重复读同一个事务内两次读同一行结果不一样。事务 A读余额得到 100事务 B把余额改成 200 并提交事务 A再读余额得到 200同一个事务里两次读结果不同因为中间被别人改了。危害事务内数据前后不一致。注意和脏读的区别脏读读到未提交的数据不可重复读读到已提交的数据但两次读之间被别人改了3、幻读同一个事务内两次执行同样的范围查询第二次多出了幻影行。事务 A查 id 100 的记录得到 5 条事务 B插入一条 id 101 的记录并提交事务 A再查 id 100得到 6 条多出来的那条就是幻影行。和不可重复读的区别不可重复读针对同一行值变了幻读针对一个范围行数变了多了或少了二、隔离级别SQL 标准定义了四种隔离级别级别越高一致性越强但并发性能越低。其中可重复读是 mysql 默认的隔离级别隔离级别脏读不可重复读幻读说明READ UNCOMMITTED读未提交❌❌❌最低级别几乎不加锁READ COMMITTED读已提交✅❌❌只能读已提交数据Oracle 默认REPEATABLE READ可重复读✅✅❌同一事务内多次读结果一致MySQL 默认SERIALIZABLE串行化✅✅✅最高级别事务串行执行