SERIALIZABLE:可串行化。强制的进行排序,在每个读数据行上添加锁,所有事务依次逐个执行,事务之间不会产生干扰。事务提交后释放锁。会导致大量超时现象和锁竞争。
② 四种隔离级别会导致的问题
隔离级别脏读不可重复读幻读
READ UNCOMMITTED√√√
READ COMMITTED×√√
REPEATABLE READ××√
SERIALIZABLE×××
③ 数据库中的隔离级别
DB2中的隔离级别:
CS(Cursor Stability):游标稳定性。逐行锁定数据,该行数据未修改时,锁定解除,继续加锁读取下一行,该行数据有修改时,则该行锁定持续到事务终止。CS的程序不能查看其他程序未COMMIT的更改。
CS提供了最大的并发性。但同一事务同一游标被处理两次,可能返回不同的结果,即不可重复度;CS程序读取的行上有任何可更新游标时,其他任何应用程序都不能更新或删除该行。
CS是DB2默认的隔离级别。在需要最大并行性但只能看到其他程序已COMMIT的数据时使用。
RR(Repeatable Read):可重复读。RR会锁定事务引用的所有行,直到COMMIT。其他程序不能修改该数据,如果一条数据被访问两次,返回相同的结果。
RR是最高隔离级别,可以最好的保证数据一致性,但是大量锁定数据,会导致并发度大大降低,同时有可能超过系统定义的持有锁数量的限制。
相当于标准定义隔离级别中的SERIALIZABLE相比,上锁范围一致。
RS(Read Stability):读稳定性。RS会锁定事务引用的所有行中符合检索条件的部分行。其他程序不可修改,但可执行INSERT操作,所以同一事务中,如果数据被访问两次可能返回新插入的数据,即幻读,但是旧数据不会有改变。
相比RR,RS锁定数据的数量大大减少,并发度得到提升。比较适合在并发环境下运行,但只适合在同一事物中不会多次发出相同查询,或不要求相同查询获得相同结果的程序,避免发生幻读。