四类隔离级别

数据库为了压制丢失更新,提出了4类隔离级别[在application配置文件中声明]。

一、为什么压制而不消除?

      数据库要从两方面去看,一个是数据的一致性,另一个是性能。数据库现在的技术完全有办法避免丢失更新,但是这样做的代价是要付出的代价。一旦用了过多的锁,出现商品抢购这类功能的时候,很多线程都会被挂起和恢复,因为使用了锁之后,一个时刻只能有一个线程访问数据,这样当多个线程访问时,就会很慢,而且过多的锁会引发宕机,大部分线程被挂起,等待持有锁事务的完成。

      

      

二、隔离级别

      1、未提交读。

      最低的隔离级别(是一种危险的隔离级别,会出现脏读),其含义是允许一个事务读取另外一个事务没有提交的数据。

      

      T2时刻中事务1中扣减了库存,T3时刻中事务2也扣减了库存,但是它也读取到了T2时刻中事务1的操作,因此T3时刻扣减后库存为0,这个时候T5在提交事务后事务1进行回滚,因为第一类丢失更新已经被克服,所以库存最终会出现脏读(库存应该为1才是正确的)。

      2、读写提交。

      指一个事务只能读取到另外一个事务已经提交的数据。

      

        在T3时刻,因为采用了读写提交的隔离级别,所以事务2不会读取到事务1中未提交的库存1,所以在T3时刻事务2扣除库存后还剩下库存为1,然后提交事务。则库存在T4中就变成了1。在T5时刻,事务1回滚,因为第一类丢失更新已经克服,所以最后的库存结果也变为了1。

      3、可重复读。

      克服读写提交中出现的不可复读的现象,因为在读写提交的时候,可能出现一些值的变化,影响当前事务的执行。

      

      

      

      4、串行化

      最高的隔离级别,会要求所有的SQL按照顺序执行,这样就可以克服上述隔离级别出现的问题,所以能够保证数据的一致性。

猜你喜欢

转载自blog.csdn.net/DorAction/article/details/87971378