数据库事务的隔离级别
2015-02-16 16:52
260 查看
SQL92标准规定,数据库事务有4个隔离级别,他们为了防止以下现象:
脏读取(Dirty read):一个事务读取了另一事务未提交的数据
A事务修改一笔数据,但仍未提交
B事务查询数据,却能读取该笔未提交的数据(如果A事务回滚,则此笔数据为脏数据,所以为脏读取)
不可重复读取(Nonrepeatable read):
A事务读取了一批数据
B事务操作或删除该批数据
A事务再次读取,发现该批数据被修改或删除了
不存在读取(Phantom read):
A事务根据条件查询了一批数据
B事务插入数据
A事务重新执行相同条件的查询,结果集并不一致
而数据库事务的隔离级别为:
本人认为,基于数据库事务的原子性、一致性,脏读取可谓是重中之重,此点很容易让人理解。
不可重复读取、不存在读取,初看之下仿佛一致。实际上不可重复读取,数据库只需要保证被操作的数据的隔离性;而不存在读取,数据库则需要保证整个表的数据的隔离性。所以他们的级别不同。
脏读取(Dirty read):一个事务读取了另一事务未提交的数据
A事务修改一笔数据,但仍未提交
B事务查询数据,却能读取该笔未提交的数据(如果A事务回滚,则此笔数据为脏数据,所以为脏读取)
不可重复读取(Nonrepeatable read):
A事务读取了一批数据
B事务操作或删除该批数据
A事务再次读取,发现该批数据被修改或删除了
不存在读取(Phantom read):
A事务根据条件查询了一批数据
B事务插入数据
A事务重新执行相同条件的查询,结果集并不一致
而数据库事务的隔离级别为:
隔离级别 | 脏读 | 不可重复读 | 不存在读 |
未提交读 | Y | Y | Y |
已提交读 | N | Y | Y |
可重复读 | N | N | Y |
串行化 | N | N | N |
不可重复读取、不存在读取,初看之下仿佛一致。实际上不可重复读取,数据库只需要保证被操作的数据的隔离性;而不存在读取,数据库则需要保证整个表的数据的隔离性。所以他们的级别不同。
相关文章推荐
- Spring事务传播机制和数据库隔离级别
- sql server 数据库事务隔离级别
- 关于数据库事务隔离级别的有关问题
- 数据库事务隔离级别
- Java程序员从笨鸟到菜鸟之(六十五)细谈Hibernate(十六)数据库事务与隔离级别
- 数据库事务的隔离级别
- 关于数据库事务隔离级别的介绍
- 数据库事务隔离级别
- 数据库事务隔离级别与锁
- 数据库事务隔离级别<转>
- 数据库事务隔离级别
- 数据库事务的隔离级别
- 什么是ACID特性,数据库如何保证ACID特性的? 事务的传播特性与隔离级别?
- 数据库事务隔离级别 之 学习笔记
- 数据库事务的隔离级别
- 数据库事务隔离级别与锁
- 理解数据库事务隔离级别以及脏读, 不可重复读, 幻读
- 数据库事务隔离级别
- 关于数据库事务的隔离级别
- Java程序员从笨鸟到菜鸟之(六十五)细谈Hibernate(十六)数据库事务与隔离级别