zoukankan      html  css  js  c++  java
  • oracle( 0 )事务

    一。并发引起的问题

    脏读:能读取未提交的数据

    不可重复读:T1事务读取数据后,T2事务执行更新操作,使T1无法再现前一次读取的结果。分三种情况:

    1.值不同 

    2.少了记录

    3.多了记录

    幻象读(后两种不可重复读):T1时间执行查询,在T2时间重新查询时,有更多或更少的行满足条件。

    二。ANSI隔离级别

    ReadUncommitted  允许一个事务查看另一个事务对数据所做的未提交的更改。

    ReadCommitted  在该事务提交之前,在该事务中所作的任何更改,在该事务之外都不可见。        

    RepeatableRead  执行时保持将读取的行锁定,从而使其他事务在此事务这前不能更改这些行。

    Serializable  在执行时将表锁定。从而使其他事务不能执行。

    隔离级别 脏读 不可重复读 幻象读
    ReadUnCommited 允许 允许 允许
    ReadCommitted    允许 允许
    RepeatableRead     允许
    Serializable       

    READ_UNCOMMITTED 会出现脏读、不可重复读、幻读(隔离级别最低,并发性能高)

    READ_COMMITTED 会出现不可重复读、幻读问题(锁定正在读取的行)

    REPEATABLE_READ 会出幻读(锁定所读取的所有行)

    SERIALIZABLE 保证所有的情况不会发生(锁表)

     

    三。Oracle中的隔离级别及实现机制

       Oracle数据库支持read committed和 serializable这两种事务隔离级别。所以Oracle不支持脏读,即Oracle中不允许一个会话读取其他事务未

    提交的数据修改结果,从而防止了由于事务回滚发生的读取不正确。

       Oracle回滚段,在修改数据记录时,会把这些记录被修改之前的结果存入undo段中。Oracle读取操作不会阻碍更新操作,更新操作也不会阻碍

    读取操作,这样在Oracle中的各种隔离级别下,读取操作都不会等待更新事务结束,更新操作也不会因为另一个事务中的读取操作而发生等待,这也是

    Oracle事务处理的一个优势所在。

     

       事务的四个基本要素:

        1:原子性,事务中各个操作应该是一个整体性,原子性的部分。

        2:一致性,事务提交后,各个操作的修改前和之后的结果应该全部一致性的成功或失败。

        3:隔离性,事务之间不得互相干扰。

        4:持久性,即事务提交后,应该持久保存。

      事务并发时可能导致的几个问题以及隔壁级别之间的差异,当时简单性的题了一下,似乎对不上题;

        1:脏读:事务A修改了某值,被事务B读出,但恰巧事务A回滚了,事务B此时持有的值即为脏读数据。

        2:不可重复读:事务A读取了某值,之后事务B读取该值并进行了更改,此时事务A/B持有的值是不同的。

        3:幻读:事务A修改某值并提交,之后事务B也修改了该值并提交,事务A提交的值被事务B提交的值覆盖掉了。

        4:串行读:事务A执行时,事务B必须等待事务A执行完毕才可执行,即事务要按顺序执行,而不能同步执行。

        据此划分出四个隔离级别:

        1:未提交读(read uncommitted): 脏读,也就是可能读取到其他会话中未提交事务修改的数据。

        2:提交读(read committed): 只能读取到已经提交的数据,多数数据库(除开MYSQL)默认都是该级别。会有不可重复读的问题。

        3:可重复读(repeated read): 在同一个事务内的查询都是事务开始时刻一致的,InnoDB的默认级别,可能导致幻读,但InnoDB解决了这个问题。

        4:串行读(serializable): 即锁表或锁行,每次读都需要获得表(行)级共享锁,读写相互阻塞。

  • 相关阅读:
    qs.stringify() 和JSON.stringify()的区别 飞鸟和蝉
    js随机数, 范围随机数 飞鸟和蝉
    VUECLI 4的跨域解决方案
    vue3elementadmin
    English dedicate 致力 题献
    解决java web项目导入后出现的问题 cannot be read or is not a valid ZIP file
    SQL 优化原则(转)
    Java Spring Error : Bean property '*****' is not writable or has an invalid setter method.
    c++面试题:#define MIN(A,B) ( (A) <= (B) ? (A) : (B) )
    freemark list 循环变量类型错误问题
  • 原文地址:https://www.cnblogs.com/yuyutianxia/p/3304313.html
Copyright © 2011-2022 走看看