• 脏读,幻读和不可重复读


    脏读:

    当一个事务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

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

  • 相关阅读:
    【Monkey】Monkey稳定性测试常用命令
    【Monkey】Monkey基础概念
    推荐一些前端开发常用框架
    MySql 分表复制表结构和数据脚本
    通过apo切面,动态切换数据源
    MySq 数据迁移,把单字段数据解析出插入到另一张表中
    hadoop 集群搭建与mapreduce开发实战(二)
    hadoop mvn项目 pom配置
    hadoop 集群搭建与mapreduce开发实战(一)
    MySql 存储过程及调用方法
  • 原文地址:https://www.cnblogs.com/firestar277/p/14496739.html
Copyright © 2020-2023  润新知