• 事务隔离级别


    ANSI/ISO SQL标准定义了4种事务隔离级别,这些隔离级别是根据事务并行出现的4个“现象”定义的。

    4个现象是:

    1.更新丢失(Lost Update):A和B同时写

    例:
    1.事务A将数值改为1并提交;
    2.事务B将数值改为2并提交。
    这时数据的值为2,事务A所做的更新将会丢失。

    解决办法:对行加锁,只允许并发一个更新事务。

    2.脏读(dirty read):A改后还未提交,B读,A又改并提交

    例:

    1.Mary的原工资为1000, 财务人员将Mary的工资改为了8000(但未提交事务)
    2.Mary读取自己的工资 ,发现自己的工资变为了8000,欢天喜地!
    3.而财务发现操作有误,回滚了事务,Mary的工资又变为了1000, 像这样,Mary记取的工资数8000是一个脏数据。


    3.不可重复读(nonrepeatable read):A先读,B再改,A再读

    例:

    1.在事务A中,Mary 读取了自己的工资为1000,操作并没有完成
    2.在事务B中,这时财务人员修改了Mary的工资为2000,并提交了事务.
    3.在事务A中,Mary 再次读取自己的工资时,工资变为了2000
    解决办法:如果只有在修改事务完全提交之后才可以读取数据,则可以避免该问题。

    4.幻读(phantom read):A改后还未提交,B改其他的,A再查

    例:

    1.A把所有的“黑色”改为“白色”

    2.B把所有的“红色”改为“黑色”

    3.A再查询黑色,却发现还有一批。

    根据对4个现象的避免程度,事务的4个隔离级别是:

    • 1.Read Uncommited :读未提交数据(会出现脏读,不可重复读,幻读)
    • 2.Read Commited :读已提交的数据(会出现不可重复读,幻读)
    • 3.Repeatable Read :可重复读(会出现幻读)
    • 4.Serializable :串行化

    四个级别与四种现象的关系是:

    英文

    中文

    更新丢失

    脏读

    不可重复读

    幻读

    Read Uncommited

    读未提交

    不会出现

    会出现

    会出现

    会出现

    Read Commited

    读已提交

    不会出现

    不会出现

    会出现

    会出现

    Repeatable Read

    可重复读

    不会出现

    不会出现

    不会出现

    会出现

    Serializable

    串行化

    不会出现

    不会出现

    不会出现

    不会出现

    大多数数据库的默认隔离级别为: Read Commited,如Sql Server , Oracle。

    少数数据库默认的隔离级别为Repeatable Read, 如MySQL InnoDB存储引擎。

  • 相关阅读:
    inflate
    【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性
    安卓延时执行代码
    Listview控件
    安卓的progress
    android studio的弹出层
    解决mysql的日志文件过大的问题
    linux查文件大小
    乔坟往事-姑妄言之
    乔坟往事-村里人家
  • 原文地址:https://www.cnblogs.com/hollen/p/2498309.html
Copyright © 2020-2023  润新知