数据库的脏数据问题 数据库的事务隔离级别简介

转载 2016年06月01日 11:25:16

转载:http://blog.csdn.net/budapest/article/details/6923272

脏读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   重新执行产生原来那些行的查询,就会得到不同的行。

 

 

MySQL事务隔离级别的认识

2010-08-06 10:27

在hibernate中如果要连续不间断的保存多个实体的实例,那么在我们保存第一个的时候,其实在数据库里是不存在数据的,即使用Session.flush()也无济于事,这到底是怎么回事呢?让我很是疑惑.......

在查阅了相关的资料后,原来是数据库对于事务的隔离级别的限制问题,而我原来的MYSQL数据库正好是不支持我上述操作的隔离级别。

1、在MYSQL中查询事务隔离级别:
select
 @@tx_isolation;(tx其实就是transaction的缩写或者习惯缩写法)
我的结果是REPEATABLE-READ(即可重复读,稍后会引用专业结束文档)

2、修改MYSQL事务隔离界别:
set
 transaction isolation level 目标隔离级别

3、再次查询隔离级别进行检验是否已经成功修改。
这样在修改了隔离级别之后,在进行save()的时候,数据库中就会存在一些数据了,问题解决了。关于其他的数据库产品,思想都是一样的。

附加、官方的SQL事务隔离级别文档:

SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。

Read Uncommitted(读取未提交内容)

在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。

Read Committed(读取提交内容)

这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。

Repeatable Read(可重读)

这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。

Serializable(可串行化)

这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。



相关文章推荐

数据库事务和隔离级别

  • 2013-03-26 12:38
  • 10KB
  • 下载

数据库事务隔离级别

  • 2011-12-19 14:09
  • 154KB
  • 下载

数据库事务以及隔离级别和可能出现的问题

1、事务:由一条或者多条SQL语句组成的工作单元,这些工作单元的内容,或者同时成功,或者同时失败 2、mySQL中如果没有显示开启事务,那么默认自动开启,每执行一条SQL语句,自动提交事务  ...

MySQL数据库引擎、数据事务与隔离级别

MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。事务是指一组相互依赖的操作行为,事务的成功取决于这些相互依赖的操作行为是否都能执行成功,只要有一个操作行为失败,就意味着整个事务失败。数...

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

一、数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted 、Read committed 、Repeatable read 、Serializabl...

数据库事务隔离级别-- 脏读、幻读、不可重复读(清晰解释)

一、数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted 、Read committed 、Repeatable read 、Serializa...

数据库事务隔离级别-- 脏读、幻读、不可重复读(清晰解释)

一、数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted 、Read committed 、Repeatable read 、Serializable ,...
  • JIESA
  • JIESA
  • 2016-05-04 18:36
  • 23931

数据库并发问题、事务隔离级别以及数据库锁

一、数据库并发问题     多用户数据库当多个用户同事操作数据库中的数据时可能会发生的并发问题,总结为以下三类:     1. 脏读(Dirty Reads):无效数据读出。     事务1修改...

数据库隔离级别、脏读、幻读和不可重复读问题

原文地址:http://blog.csdn.net/sunxing007/article/details/6427290 数据库事务的4个特性: 原子性(atomic): 都成功或者都失败; 一...

Spring 五个事务隔离级别和七个事务传播行为和数据读取出现的四个问题(丢失或覆盖更新、脏读、非重复读、幻想读)

Spring在TransactionDefinition接口中定义了五个不同的事务隔离级别:隔离级别是指若干个并发的事务之间的隔离程度。TransactionDefinition 接口中定义了五个表示...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)