数据库事务隔离级别

来源:互联网 发布:美国恐怖故事 知乎 编辑:程序博客网 时间:2024/06/06 09:37
    隔离级别指定当前事务执行时所不允许的交互作用类型, 即事务间是否相互隔离,或它们是否可以读取或更新被另一事务所使用的信息。

    首先了解以下概念:
    ●脏读(dirty read):当一个事务读取另一个事务尚未提交的修改时,产生脏读。比如:某时刻会话A修改了一个数据,但还未提交,此时会话B,读取了该数据,这是会话A回滚了事物,这就导致数据出现了不一致状态,这就是脏读。
    ●不可重复读(non-repeatable read):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。比如:某时刻会话A的一个事物里查询一个数据,得到的数据是1,这是会话B修改了该数据的值为2,并提交了,此时会话A的事物又要读取该数据,这是的数据是2,就样就出现了同一个事务内,读的结果不一样,这就是不可重复读。(oracle和ms-sql默认的等级都是这个)
    ●幻像读(phantom read):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。比如:某时刻会话A的一个事物里读取某一范围数据行的过程中,这是会话B对数据进行了insert操作,,此时会话A的事物又要读取数据行时,就会发现新的幻影行。

    数据库事务的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题,如下表:
 



0 0
原创粉丝点击