事务基本概念之脏读,不可重复读,幻觉读
2010-07-28 16:18
363 查看
什么是脏数据,脏读,不可重复读,幻觉读?
以下几个术语常见于数据库文章、论文。操作系统分析中亦有涉及。
脏读 是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。
不可重复读 是指在一个事务内,多次读同一 数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的 的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。
幻觉读 是指当事务不是独立执行时发生的一种现象,例如 第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。
ANSI SQL中定义的4个隔离级实际上是用对锁的操作来定义的:
脏读: 读数据时不加锁。
提交读: 在读数据之前加一个读锁,读完之后释放锁。
可重复读: 在读数据之前加一个读锁,读完之后不释放锁,直到事务rollback或者commit后才释放锁。
串行化读: 在读数据之前在读取的条件上加锁(称为条件锁),读完之后不释放锁,直到事务rollback或者commit后才释放锁。
以下几个术语常见于数据库文章、论文。操作系统分析中亦有涉及。
脏读 是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。
不可重复读 是指在一个事务内,多次读同一 数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的 的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。
幻觉读 是指当事务不是独立执行时发生的一种现象,例如 第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。
ANSI SQL中定义的4个隔离级实际上是用对锁的操作来定义的:
脏读: 读数据时不加锁。
提交读: 在读数据之前加一个读锁,读完之后释放锁。
可重复读: 在读数据之前加一个读锁,读完之后不释放锁,直到事务rollback或者commit后才释放锁。
串行化读: 在读数据之前在读取的条件上加锁(称为条件锁),读完之后不释放锁,直到事务rollback或者commit后才释放锁。
相关文章推荐
- 锁的用处及脏读、不可重复读和幻觉读的概念
- 锁的用处及脏读、不可重复读和幻觉读的概念
- 锁的用处及脏读、不可重复读和幻觉读的概念
- 锁的用处及脏读、不可重复读和幻觉读的概念
- 锁的用处及脏读、不可重复读和幻觉读的概念
- 脏读、不可重复读和幻觉读的概念
- 锁的用处及脏读、不可重复读和幻觉读的概念(转载)
- 锁的用处及脏读、不可重复读和幻觉读的概念
- spring 事务特征、事务传播特征、事务隔离级别、 脏读、不可重复读、 幻觉读
- 事务的隔离级别演示-避免脏读,演示不可重复读发生
- Java -- JDBC 事务处理, 事务的隔离级别 脏读 不可重复读 等...
- 4.事务提交过程,交易的基本概念,Oracle交易周期,保存点savepoint,数据库的隔离级别
- 脏读、不可重复读 共享锁、悲观锁 和 事务五种隔离级别
- 数据库事务中的脏读,不可重复读与幻读及数据库的隔离级别
- 理解数据库事务隔离级别以及脏读, 不可重复读, 幻读
- 数据事务造成的脏读、不可重复读、幻读
- 脏读、不可重复读 共享锁、悲观锁 和 事务五种隔离级别
- 事务基本概念
- Oracle 事务ACID基本概念(原子性、一致性、隔离性、持久性)
- 理解数据库事务隔离级别以及脏读, 不可重复读, 幻读