数据库隔离 脏读 幻读与不可重复读

一、隔离级别与现象

数据库隔离有4个级别

read uncomitted ,未授权读取

read committed ,授权读取

repeatable read , 可重复读

serializable ,串行化

可能产生的不一致的现象有3种

脏读

不可重复读

幻读

二、3种现象

  脏读,就是读了脏数据;另一个事务修改了数据但未提交,我们读到了这个未提交的数据即脏数据,这种现象就是脏读;

举个栗子,balance字段值为100,另一个事务修改为200,未提交的时候我们读到了200,接着那个事务回滚了,实际值应该是100,但我们读的是200;

  不可重复读,就是对于一个数据,我重复读的时候它的值发生了改变;即两次读取之间被另一个事务进行了修改;

再举个栗子,我读到balance字段值为100,我做了判断(比如是否大于0),然后我再次读的时候它变成了200; 对于100这个值我没有重复读到,即发生了不可重复读;

  幻读,就是再次读取时发现了新的记录或少了记录,以为出现了幻觉;

最后一颗栗子,我读数据的时候没有balance字段,我要新增balance为0时,提示我存在这个字段了;我第二次读的时候 多了这条记录,我以为第一次读出现了幻觉;

大多数场景是我第一次读完后(可能是修改了某条数据后再读的),锁定了我读的那一条数据,但另一个事务改了这张表的其它数据,我第二次读的时候以为第一次读出现了幻觉(可能第一次修改了全表,另一个事务只改了一条数据,我以为我没成功修改那条数据);

三、隔离级别

  脏读 不可重复读 幻读
Read uncommitted 可能发生  可能发生 可能发生
Read committed   可能发生 可能发生
Repeatable read     可能发生
Repeatable read      

原文地址:https://www.cnblogs.com/chenhao0302/p/9166100.html

时间: 2024-11-09 08:00:16

数据库隔离 脏读 幻读与不可重复读的相关文章

数据库事务隔离级别-- 脏读、幻读、不可重复读

一.数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted .Read committed .Repeatable read .Serializable ,这四个级别可以逐个解决脏读 .不可重复读 .幻读 这几类问题. √: 可能出现    ×: 不会出现   脏读 不可重复读 幻读 Read uncommitted √ √ √ Read committed × √ √ Repeatable read × × √ Serializable × × × 注意

事务的四大特性&脏读、幻读、不可重复读的区别&事务的隔离级别

一.什么是事务 事务:是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作:这些操作作为一个整体一起向系统提交,要么都执行.要么都不执行:事务是一组不可再分割的操作集合(工作逻辑单元): 事务的四大特性: 1 .原子性 (atomicity):强调事务的不可分割. 事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 2 .一致性 (consistency):事务的执行的前后数据的完整性保持一致. 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态.因此

Mysql事务,并发问题,锁机制-- 幻读、不可重复读(转)

1.什么是事务 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点. 原子性:要不全部成功,要不全部撤销 隔离性:事务之间相互独立,互不干扰 一致性:数据库正确地改变状态后,数据库的一致性约束没有被破坏 持久性:事务的提交结果,将持久保存在数据库中 2.事务并发会产生什么问题 1)第一类丢失更新:在没有事务隔离的情况下,两个事务都同时更新一行数据,但是第二个事务却中途失败退出, 导致对数据的两个修改都失效了. 例如: 张三的工资为5000,事务A中获取工资为5000,事务B获取工资为5

数据库的脏读、幻读、不可重复读

1.脏读: 指一个事务A正在访问数据,并且对该数据进行了修改,但是这种修改还没有提交到数据库中(也可能因为某些原因Rollback了).这时候另外一个事务B也访问这个数据,然后使用了这个被A修改的数据,那么这个数据就是脏的,并不是数据库中真实的数据.这就被称作脏读. 解决办法:把数据库事务隔离级别调整到READ_COMMITTED 即让用户在更新时锁定数据库,阻止其他用户读取,直到更新全部完成才让你读取. 2.幻读: 指一个事务A对一个表中的数据进行了修改,而且该修改涉及到表中所有的数据行:同时

数据库中的脏读、幻读和不可重复读

1.数据脏读 事务a修改了某条数据,然后事务b读取了事务a修改的该条数据,然后事务a由于某些原因,事务a回滚了,这样事务b读到的数据就和回滚的数据不同了,这时事务b读取的数据就是脏数据. 概括来讲:就是一个事务读取了另一个事务未提交的数据. 2.数据幻读 事务a按一定条件读取了该表的一些数据,然后事务b想该表插入了一些满足事务a查询条件的数据,当事务a再次以相同条件查询数据时,会发现多出来一些数据,就好像产生了幻觉一样,我们称为幻读. 概括来讲,就是一个事物的两次查询,出现的查询数目不一致的情况

关于脏读、幻读和不可重复读

1. 脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据. e.g.         1.Mary的原工资为1000, 财务人员将Mary的工资改为了8000(但未提交事务)         2.Mary读取自己的工资 ,发现自己的工资变为了8000,欢天喜地!         3.而财务发现操作有误,回滚了事务,Mary的工资又变为了1000           像这样,Mary记取的工资数800

幻读和不可重复读的区别

不可重复读的重点是修改:  同样的条件, 你读取过的数据, 再次读取出来发现值不一样了 幻读的重点在于新增或者删除  同样的条件, 第1次和第2次读出来的记录数不一样当然, 从总的结果来看, 似乎两者都表现为两次读取的结果不一致. 但如果你从控制的角度来看, 两者的区别就比较大  对于前者, 只需要锁住满足条件的记录  对于后者, 要锁住满足条件及其相近的记录 不可重复读重点在于update幻读重点在于insert,delete

一文带你理解脏读,幻读,不可重复读与mysql的锁,事务隔离机制

首先说一下数据库事务的四大特性 1 ACID 事务的四大特性是ACID(不是"酸"....) (1) A:原子性(Atomicity) 原子性指的是事务要么完全执行,要么完全不执行. (2) C:一致性(Consistency) 事务完成时,数据必须处于一致的状态.若事务执行途中出错,会回滚到之前的事务没有执行前的状态,这样数据就处于一致的状态.若事务出错后没有回滚,部分修改的内容写入到了数据库中,这时数据就是不一致的状态. (3) I:隔离性(Isolation) 同时处理多个事务时

事务隔离级别区分,未提交读,提交读,可重复读

事务隔离超通俗好懂的的讲解 按照隔离的级别由低到高,越高的隔离,效率越差 0).DEFAULT 默认隔离级别,由数据库的数据隔离级别确定隔离级别       1).READ_UNCOMMIYTTED 都未提交的 级别最低             允许别的事务,去读取这个事务为提交之前的数据             缺点:可能会造成脏读.幻读.不可重复读.             例子讲解:店家对1000元商品进行降价500处理,数据更改,但未提交事务:             然后你查到降价将货