MySQL中脏读、不可重复度、幻读的区别

转载:MySQL专题: 脏读、不可重复读、幻读区别Mysql中脏读、不可重复读、幻读的区别

脏读(Dirty Read)

脏读是指当一个事务A正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务B也访问这个数据,并使用了这个数据。结果事务A进行了事务回滚,那么事务B读取的数据就是脏读。

例如:
张三的工资为5000,事务A进行了update操作把他的工资改为8000,但事务A尚未提交。与此同时,事务B正在读取张三的工资,读取到张三的工资为8000。随后,事务A发生异常,而回滚了事务。张三的工资又回滚为5000。最后,事务B读取到的张三工资为8000的数据即为脏数据,事务B做了一次脏读。

不可重复读

指在同一事务中,对于同一数据,执行完全相同的select语句,第一次读取与后一次读取数据不一致的情况。在事务A读取数据还没有结束时,另外一个事务B也访问了该同一数据。在事务A第一次读数据之间,由于事务B对该数据进行了修改,那么事务A两次读取的数据是不一样的,这样就造成了不可重复读。

例如:
在事务A中,读取到张三的工资为5000,操作没有完成,事务还没提交。与此同时,事务B把张三的工资改为8000,并提交了事务。随后,在事务A中,再次读取张三的工资,此时工资变为8000。在一个事务中前后两次读取的结果并不致,导致了不可重复读。

幻读

一个事务按相同的查询条件查询之前检索过的数据,却发现检索出来的结果集条数变多或者减少(由其他事务插入、删除的),类似产生幻觉。

例如:
目前工资为5000的员工有10人,事务A读取所有工资为5000的人数为10人。此时,事务B插入一条工资也为5000的记录。之后,事务A再次读取工资为5000的员工,发现记录为11人,比之前多一人。此时产生了幻读。

幻读和不可重复读的区别

不可重复读

重点是修改:在同一事务中,同样的条件,第一次读的数据和第二次读的数据不一样。(一个事务多次读取同一范围内数据时,另外一个事务发生insert操作并提交了)。数据变化

幻读

重点在于新增或者删除:在同一事务中,同样的条件,,第一次和第二次读出来的记录数不一样。(一个事务多次读取同一条数据时,另外一个事务发生了insert,delete操作并提交了)。行数变化

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值