zoukankan      html  css  js  c++  java
  • 脏读,幻读和不可重复读

    脏读:

    当一个事务A正在访问数据,并修改了数据,还没提交到数据库中。此时,另一个事务B也访问了这个数据,然后使用这个数据。

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

    幻读:

    当两个用户同时修改同一个数据表时,当一个用户A修改了一些项,另一个用户B添加了一些项。A再次查询时,发现多了一些项。

       e.g.
       目前工资为1000的员工有10人。
       1.事务1,读取所有工资为1000的员工。
       2.这时事务2向employee表插入了一条员工记录,工资也为1000
       3.事务1再次读取所有工资为1000的员工 共读取到了11条记录,

    解决办法:如果在操作事务完成数据处理之前,任何其他事务都不可以添加新数据,则可避免该问题

    不可重复读:

    一个事务A内,多次读取同一个数据,A还没有结束。另一个事务B修改了数据,事务A前后读取相同的数据,结果不同。

        e.g.
        1.在事务1中,Mary 读取了自己的工资为1000,操作并没有完成
        2.在事务2中,这时财务人员修改了Mary的工资为2000,并提交了事务.
        3.在事务1中,Mary 再次读取自己的工资时,工资变为了2000

     解决办法:如果只有在修改事务完全提交之后才可以读取数据,则可以避免该问题。

  • 相关阅读:
    常用函数
    PostgreSql那点事(文件读取写入、命令执行的办法)
    如何检测Windows中的横向渗透攻击
    小米笔记本pro版bios经常找不到硬盘
    grunt教程
    nodejs廖雪峰大神教程
    ClickOnce是什么?如何使用?
    asp.net中的ORA-12154: TNS: 无法解析指定的连接标识符
    未能加载文件或程序集 ICSharpCode.SharpZipLib
    PL/SQL 循环
  • 原文地址:https://www.cnblogs.com/firestar277/p/14496739.html
Copyright © 2011-2022 走看看