zoukankan      html  css  js  c++  java
  • 数据库事务隔离级别(转)

    一,事务的4个基本特征 

    Atomic(原子性): 
    事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要 
    么全部成功,要么全部失败。 

    Consistency(一致性): 
    只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初 
    状态。 

    Isolation(隔离性): 
    事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正 
    确性和完整性。同时,并行事务的修改必须与其他并行事务的修改 
    相互独立。 

    Durability(持久性): 
    事务结束后,事务处理的结果必须能够得到固化。 

    以上属于废话 

    二,为什么需要对事务并发控制 

    如果不对事务进行并发控制,我们看看数据库并发操作是会有那些异常情形

    Lost update: 
    两个事务都同时更新一行数据,但是第二个事务却中途失败退出, 
    导致对数据的两个修改都失效了。

    Dirty Reads: 
    一个事务开始读取了某行数据,但是另外一个事务已经更新了此数 
    据但没有能够及时提交。这是相当危险的,因为很可能所有的操作 
    都被回滚。 

    Non-repeatable Reads: 
    一个事务对同一行数据重复读取两次,但是却得到了不同的结果。 

    Second lost updates problem: 
    无法重复读取的特例。有两个并发事务同时读取同一行数据,然后其 
    中一个对它进行修改提交,而另一个也进行了修改提交。这就会造成 
    第一次写操作失效。 

    Phantom Reads: 
    事务在操作过程中进行两次查询,第二次查询的结果包含了第一次查 
    询中未出现的数据(这里并不要求两次查询的SQL语句相同)。这是 
    因为在两次查询过程中有另外一个事务插入数据造成的。 

    三, 数据库的隔离级别 

    为了兼顾并发效率和异常控制,在标准SQL规范中,定义了4个事务隔
    离级别,(ORACLE和SQLSERER对标准隔离级别有不同的实现 )

    Read Uncommitted: 
    直译就是"读未提交",意思就是即使一个更新语句没有提交,但是别 
    的事务可以读到这个改变.这是很不安全的. 

    Read Committed: 
    直译就是"读提交",意思就是语句提交以后即执行了COMMIT以后 
    别的事务就能读到这个改变. 

    Repeatable Read: 
    直译就是"可以重复读",这是说在同一个事务里面先后执行同一个 
    查询语句的时候,得到的结果是一样的. 

    Serializable: 
    直译就是"序列化",意思是说这个事务执行的时候不允许别的事务 
    并发执行. 

    四,隔离级别对并发的控制
     

    下表是各隔离级别对各种异常的控制能力:

     

     

      LU DR NRR SLU PR
    RU N Y Y Y Y
    RC N N Y Y Y
    RR N N N N Y
    S N N N N N
  • 相关阅读:
    运行Jmeter时,出现java.util.prefs.WindowsPreferences <init>
    Jmeter下载安装及JDK安装
    面试常用-基础理论(五)
    Fiddler (六) 最常用的快捷键
    Fiddler (五) Mac下使用Fiddler
    Fiddler (四) 实现手机的抓包
    Fiddler (三) Composer创建和发送HTTP Request
    Fiddler (二) Script 用法
    Web调试工具——Fiddler介绍
    生成任意位数随机字符串
  • 原文地址:https://www.cnblogs.com/xiaoyao2011/p/2143027.html
Copyright © 2011-2022 走看看