脏读,不可重复读,虚读及四大隔离级别

脏读 dirty reads:当事务读取还未被提交的数据时,就会发生这种事件。举例来说:Transaction 1 修改了一行数据,然后 Transaction 2 在 Transaction 1 还未提交修改操作之前读取了被修改的行。如果 Transaction 1 回滚了修改操作,那么 Transaction 2 读取的数据就可以看作是从未存在过的。

不可重复的读 non-repeatable reads:当事务两次读取同一行数据,但每次得到的数据都不一样时,就会发生这种事件。举例来说:Transaction 1 读取一行数据,然后 Transaction 2 修改或删除该行并提交修改操作。当 Transaction 1 试图重新读取该行时,它就会得到不同的数据值(如果该行被更新)或发现该行不再存在(如果该行被删除)。

虚读 phantom read:如果符合搜索条件的一行数据在后面的读取操作中出现,但该行数据却不属于最初的数据,就会发生这种事件。举例来说:Transaction 1 读取满足某种搜索条件的一些行,然后 Transaction 2 插入了符合 Transaction 1 的搜索条件的一个新行。如果 Transaction 1 重新执行产生原来那些行的查询,就会得到不同的行。

READ_UNCOMMITTED: 会出现脏读、不可重复读、幻读 (读数据时不加锁 )
READ_COMMITTED:  会出现不可重复读、幻读问题【锁定正在读取的行。 在读数据之前加一个读锁,读完之后释放锁】
REPEATABLE_READ: 会出幻读【锁定所读取的所有行。在读数据之前,加一个读锁,读完之后不释放锁,直到事务rollback或者commit后才释放锁】
SERIALIZABLE: 保证所有的情况不会发生。【锁表。在读数据之前,加锁(称为条件锁),读完之后不释放锁,直到事务rollback或者commit后才释放锁】

时间: 2024-09-30 11:31:30

脏读,不可重复读,虚读及四大隔离级别的相关文章

数据库并发导致的脏读 不可重复读 幻读的处理方法

在做ERP订单接入仓库库存的时候出现了一个问题.下单会读取该商品是否有库存.如果有那么就下单 减去(可下单库存,物理库存不变) 没有则提示库存不足 在并发情况下就会导致 u1用户下单编号为1的商品1个  u2用户也下单编号为1的商品1个.编号为1的商品库存只有1个. 那么当u1在读取出数据的时候发现库存有一个 但是还没有写入库存的操作   u2也下单成功并提交  那么就会导致数据错乱 本来应该是只有u1会下单成功u2则提示库存不足 这里可以用事物的隔离机制或乐观锁来解决 事物是一个逻辑单元 原子

mysql事务隔离级别/脏读/不可重复读/幻读详解

一.四种事务隔离级别 1.1 read uncommitted 读未提交 即:事务A可以读取到事务B已修改但未提交的数据. 除非是文章阅读量,每次+1这种无关痛痒的场景,一般业务系统没有人会使用该事务隔离级别,标准实在太宽松了. 1.2 read committed 读已提交(简称RC) 即:事务A只能读取到事务B修改并已提交的数据. 这个级别相对要严格一些,至少是要等其它事务把变更提交到db,才能读取到,听上去蛮靠谱的.但是有些业务场景,比如会员系统中,如果要在一个事务中,多次读取用户身份,判

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

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

商品分类-商品详情-数据库脏读-不可重复读-幻读-订单生成

商品详情的无限极分类 --北京 --朝阳区 ---上海 --松江 --大学城 def get_level(data): data_list=[] for item in data: if item['parent_id']==0: item['level']=0 else: item['level']=1 data_list.append(item) return data_list data=[ {"cat_id":1,"name":"北京",

了解数据库中脏读+不可重复读+幻影读

"读现象"是多个事务并发执行时,在读取数据方面可能碰到的状况.先了解它们有助于理解各隔离级别的含义.其中包括脏读.不可重复读和幻读. 脏读: 脏读又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取到的数据是无效的. 脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交(commit)到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据.因为这个数据是还没有提交

脏读 不可重复读 幻读

脏读(Dirty Read)     脏读意味着一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚 不可重复读(Unrepeatable Read) 不可重复读意味着,在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据.这是由于查询时系统中其他事务修改的提交而引起的. 例如:事务B中对某个查询执行两次,当第一次执行完时,事务A对其数据进行了修改.事务B中再次查询时,数据发生了改变 幻读(phantom read) 幻读,是指当事务不是独立执行时发生的一种现象,例如第一个事务对

脏读 不可重复读 幻读以及第一、二类丢失更新

http://blog.csdn.net/gaoshan_820822/article/details/4582561 脏读(Dirty Read) 脏读意味着一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚. 不可重复读(Unrepeatable Read) 不可重复读意味着,在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据.这是由于查询时系统中其他事务修改的提交而引起的. 例如:事务B中对某个查询执行两次,当第一次执行完时,事务A对其数据进行了修改.事务B中再次查询时

理解数据库事务隔离级别以及脏读, 不可重复读, 幻读(转)

  转自:http://blog.csdn.net/sunxing007/article/details/6427290 数据库事务的4个特性: 原子性(atomic): 都成功或者都失败: 一致性(consistency):事务操作之后,数据库所处的状态和业务规则是一致的;比如a,b账户相互转账之后,总金额不变: 隔离性(isolation):操作中的事务不相互影响; 持久性(durability):事务提交后被持久化到数据库. 脏读,不可重复读, 幻读 幻读phantom read:事务1读

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

一 数据库事务的隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted .Read committed .Repeatable read .Serializable ,这四个级别可以逐个解决脏读 .不可重复读 .幻读这几类问题. 1. Read UnCommitted(读未提交) 最低的隔离级别.一个事务可以读取另一个事务并未提交的更新结果. 2. Read Committed(读提交) 大部分数据库采用的默认隔离级别.一个事务的更新操作结果只有在该事务提交之后,另