• 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): 即锁表或锁行,每次读都需要获得表(行)级共享锁,读写相互阻塞。

  • 相关阅读:
    python 包管理工具 pip 的配置
    Python 变量作用域 LEGB (下)—— Enclosing function locals
    Python 变量作用域 LEGB (上)—— Local,Global,Builtin
    2020 Java 面试题 小结 (答案慢慢补上,有错误请指出)
    mysql 根据日期(date)做年,月,日分组统计查询
    jvm指令
    正则表达式 分割地址 获取省市区详细地址
    .Net 异常记录
    WCF设计服务协议(一)
    plsql ORA-01789:查询块具有不正确的结果列数
  • 原文地址:https://www.cnblogs.com/yuyutianxia/p/3304313.html
Copyright © 2020-2023  润新知