事务并发面临的问题
-
脏读
两个事务同时执行,事务A插入数据失败回滚,另一个事务B读取到了事务A已修改却未提交时的数据,回滚后该数据失效。 -
不可重复读
两个事务同时执行,事务A两次读取数据,另一个事务B在这两次之间修改数据,第二次读取与第一次读取不一致 -
幻读
两个事务同时执行数据写入,事务A先查询确认不存在以某id为主键的数据,再新增使用该主id的数据,另一个事务B在事务A查询和写入之间写入了使用该主id的数据,导致事务A插入失败。
事务隔离级别
隔离级别用于解决上述 脏读、不可重复读、幻读 问题:
-
读未提交
高性能,不解决任何问题。 -
读已提交
解决脏读问题,一个事务只能读取其他事务已提交的数据,防止其他事务的回滚导致其修改失效。 -
可重复读
解决脏读、不可重复读问题,同一个事务内,对同样的数据进行多次读取结果一致。 -
串行读
事务不可并发执行,不会发生并发错误。