zoukankan      html  css  js  c++  java
  • 隔离级别 && SNAPSHOT

    read uncommitted | 0 未提交读

    将查询的隔离级别指定为 0。
    可以读脏数据。
    读脏数据:一事务对数据进行了增删改,但未提交,有可能回滚,另一事务却读取了未提交的数据。
     
    例:

    公司发工资了,领导把5000元打到singo的账号上,但是该事务并未提交,而singo正好去查看账户,发现工资已经到账,是5000元整,非常高兴。可是不幸的是,领导发现发给singo的工资金额不对,是2000元,于是迅速回滚了事务,修改金额后,将事务提交,最后singo实际的工资只有2000元,singo空欢喜一场。


    出现上述情况,即我们所说的脏读,两个并发的事务,“事务A:领导给singo发工资”、“事务B:singo查询工资账户”,事务B读取了事务A尚未提交的数据。

    read committed | 1 已提交读

    将查询的隔离级别指定为 1。
    避免脏读,但可以出现不可重复读和幻读。
    不可重复读:一事务对数据进行了更新或删除操作,另一事务两次查询的数据不一致。
    幻像读:一事务对数据进行了新增操作,另一事务两次查询的数据不一致。
     
    大多数数据库的默认级别就是Read committed,比如Sql Server , Oracle。
     
    例:

    singo拿着工资卡去消费,系统读取到卡里确实有2000元,而此时她的老婆也正好在网上转账,把singo工资卡的2000元转到另一账户,并在singo之前提交了事务,当singo扣款时,系统检查到singo的工资卡已经没有钱,扣款失败,singo十分纳闷,明明卡里有钱,为何......

    出现上述情况,即我们所说的不可重复读,两个并发的事务,“事务A:singo消费”、“事务B:singo的老婆网上转账”,事务A事先读取了数据,事务B紧接了更新了数据,并提交了事务,而事务A再次读取该数据时,数据已经发生了改变。

     

    repeatable read | 2 可重复读

    将查询的事务隔离级别指定为 2。
    避免脏读,不可重复读,允许幻像读。
     
    Mysql的默认隔离级别就是Repeatable read。
     
    例:

    当singo拿着工资卡去消费时,一旦系统开始读取工资卡信息(即事务开始),singo的老婆就不可能对该记录进行修改,也就是singo的老婆不能在此时转账。

    虽然Repeatable read避免了不可重复读,但还有可能出现幻读。

    singo的老婆工作在银行部门,她时常通过银行内部系统查看singo的信用卡消费记录。有一天,她正在查询到singo当月信用卡的总消费金额(select sum(amount) from transaction where month = 本月)为80元,而singo此时正好在外面胡吃海塞后在收银台买单,消费1000元,即新增了一条1000元的消费记录(insert transaction ... ),并提交了事务,随后singo的老婆将singo当月信用卡消费的明细打印到A4纸上,却发现消费总额为1080元,singo的老婆很诧异,以为出现了幻觉,幻读就这样产生了。

     

    serializable | 3 可序列化

    将查询的隔离级别指定为3,是最高的事务隔离级别,同时代价也花费最高,性能很低,一般很少使用。
    事务顺序执行,不仅可以避免脏读、不可重复读,还避免了幻像读。
    执行效率慢(我遇到过一种情况,用时是隔离级别1的30倍),使用时慎重。
     

    SNAPSHOT

    当读取数据时,可以保证读操作读取的行是事务开始时可用的最后提交版本。
    这意味着这种隔离级别可以保证读取的是已经提交过的数据,并且可以实现可重复读,
    也能确保不会幻读。不过这种隔离级别使用的不是共享锁,而是行版本控制。
     
     
     
  • 相关阅读:
    面向对象的继承关系体现在数据结构上时,如何表示
    codeforces 584C Marina and Vasya
    codeforces 602A Two Bases
    LA 4329 PingPong
    codeforces 584B Kolya and Tanya
    codeforces 584A Olesya and Rodion
    codeforces 583B Robot's Task
    codeforces 583A Asphalting Roads
    codeforces 581C Developing Skills
    codeforces 581A Vasya the Hipster
  • 原文地址:https://www.cnblogs.com/argenbarbie/p/5278012.html
Copyright © 2011-2022 走看看