事务的隔离级别有:
1、READ UNCOMMITTED --> 读未提交
由于在读取数据时不做任何限制所以并发性能很高,但是会出现⼤量的数据安全问题,比如在事务A中执行了⼀条 INSERT 语句,在没有执行 COMMIT 的情况下,会在事务B中被读取到,此时如果事务A执行回滚操作,那么事务B中读取到事务 A写入的数据将没有意义,我们把这个理象叫做 "脏读" 。



2、READ COMMITED --> 读已提交与不可提交
解决了脏读问题,这时事务只能读到了其 他事务提交之后的数据,但会出现不可重复读的问题,比如事务A先对某条数据进行了查询,之后事务 B对这条数据进行了修改,并且提交( COMMIT )事务,事务A再对这条数据进行查询时,得到了事务B 修改之后的结果,这导致了事务A在同⼀个事务中以相同的条件查询得到了不同的值,这个现象要"不可重复读"。


3、REPEATABLE READ --> 可重复读与幻读
解决了不可重复读问题,这时同一个事务中读取的数据在任何时候都是相同的结果,但还会出现一个问题,事务A查询了⼀个区间的记录得到 结果集A,事务B向这个区间的间隙中写入了⼀条记录并提交,事务A再查询这个区间的结果集时会查 到事务B新写入的记录得到结果集B,两次查询的结果集不⼀致,这个现象就是"幻读"。



4、SERIALIZABLE --> 串行化
进一步提升事务的隔离级别到 SERIALIZABLE ,此时所有事务串行执行,可以解决所有并发中的安全问题。
5、不可重复读和幻读的核心区别
不可重复读(Non-repeatable Read)
- 定义:同一个事务中,以相同条件多次查询同一条数据,得到不同的结果
- 产生原因:其他事务对该条数据进行了修改并提交
- 影响范围:针对已存在的单条数据
幻读(Phantom Read)
- 定义:同一个事务中,以相同条件多次查询一个数据范围,得到不同的结果集
- 产生原因:其他事务向该查询范围中插入或删除了新的记录并提交
- 影响范围:针对数据范围或结果集
6、不同隔离级别的性能与安全

1394

被折叠的 条评论
为什么被折叠?



