zoukankan      html  css  js  c++  java
  • Oracle 6

    并发带来的问题

    1.脏读dirty read

    脏读的问题是transaction读到了没有被提交的数据。例如,T1更新了data1,还没提交,这时T2读取了更新后的data1, 用于计算和更新别的值, 然后T1又回滚了data1。


    如果是隔离级别是read commited, 那么T1就会对data1加exclusive lock, T2要等待T1释放锁才能读取到,就避免了脏读。

    2. 不可重复读 nonrepeatable read,

    不可重复读就是, transaction每次读一行都会得到不同的值。例如, T1读了一行数据data1, 这时T2更新或删除了data1,并提交,T1再次读取data1,就会发现data1值变了。

    3. 幻读 Phantoms,

    T1在查询某些数据,这时T2插入一些符合T1查询条件的数据,T1再次查询就会得到不同的结果。 这就是幻读。

    ANSI/ISO SQL定义了4种隔离级别,请看下表中这些隔离级别和以上问题的关系

    Isolation Level Dirty Read Nonrepeatable Read Phantom Read
    READ UNCOMMITTED Permitted Permitted Permitted
    READ COMMITTED -- Permitted Permitted
    REPEATABLE READ -- -- Permitted
    SERIALIZABLE -- -- --

    可见,

    READ UNCOMMITED时, 问题1,2,3都有可能发生。

    READ COMMITED时, 消除了脏读问题

    REPEATABLE READ时,消除了不可重复读问题

    SERIALIZABLE时,消除了幻读。

  • 相关阅读:
    《当程序员的那些狗日日子》(二十六)再下决心
    创建本地数据库
    Servlet的开发和使用
    tomcat7不能创建解决办法
    windows系统纯净版下载
    Linux打包命令
    Filter的开发和使用
    C语言地址传递和值传递简析
    Servlet生命周期
    Java EE架构
  • 原文地址:https://www.cnblogs.com/xzpp/p/3409272.html
Copyright © 2011-2022 走看看