数据库事务并发有关问题
来源:互联网 发布:js修改css样式表格 编辑:程序博客网 时间:2024/05/16 19:33
http://blog.csdn.net/kobejayandy/article/details/9166093
多个事务同时访问数据库时候,会发生下列5类问题,包括3类数据读问题(脏读,不可重复读,幻读),2类数据更新问题(第一类丢失更新,第二类丢失更新):
1,脏读(dirty read)
A事务读取B事务尚未提交的更改数据,并在这个数据基础上操作。如果B事务回滚,那么A事务读到的数据根本不是合法的,称为脏读。在oracle中,由于有version控制,不会出现脏读。
2,不可重复读(unrepeatable read)
A事务读取了B事务已经提交的更改(或删除)数据。比如A事务第一次读取数据,然后B事务更改该数据并提交,A事务再次读取数据,两次读取的数据不一样。
3,幻读(phantom read)
A事务读取了B事务已经提交的新增数据。注意和不可重复读的区别,这里是新增,不可重复读是更改(或删除)。这两种情况对策是不一样的,对于不可重复读,只需要采取行级锁防止该记录数据被更改或删除,然而对于幻读必须加表级锁,防止在这个表中新增一条数据。
4,第一类丢失更新
A事务撤销时,把已提交的B事务的数据覆盖掉。这种错误会造成非常严重的后果。
5,第二类丢失更新
A事务提交时,把已提交的B事务的数据覆盖掉。这种错误会造成非常严重的后果。
数据库通过锁机制解决数据并发问题。
ANSI SQL 92标准定义了4个等级的事务隔离级别:
READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE,具体介绍如下:
READ UNCOMMITTED 会出现脏读、不可重复读、幻读 ( 隔离级别最低,并发性能高 )
READ COMMITTED 会出现不可重复读、幻读问题(锁定正在读取的行)
REPEATABLE READ会出幻读(锁定所读取的所有行)
SERIALIZABLE 保证所有的情况不会发生(锁表)
SQL 92 推荐使用REPEATABLE READ 保证数据的读一致性。
- 数据库事务并发有关问题
- 数据库事务并发有关问题
- 数据库事务并发有关问题
- 数据库事务并发有关问题
- 数据库事务并发问题
- 数据库事务并发问题描述
- 数据库事务并发带来的问题
- 数据库--事务(定义、基本特征、并发问题)
- 数据库事务并发带来的问题
- 数据库事务并发带来的问题
- 数据库并发事务中的问题与解决方案
- 数据库事务并发带来的问题
- 数据库并发问题、事务隔离级别以及数据库锁
- 数据库事务(1)数据库事务的特性以及 并发事务引起的问题
- 关于数据库事务隔离级别的有关问题
- 数据库事务和并发
- 数据库 事务并发控制
- 数据库事务并发:概述
- poj 2931 Building a Space Station <克鲁斯卡尔>
- linux延时函数
- 路径动画
- cglib动态代理和jdk的动态代理
- Android xml实现Button背景图片
- 数据库事务并发有关问题
- 用64行代码实现生产者与消费者模型
- Spring JdbcTemplate Querying examples
- c# Socket 开发小记
- XMl基础(三)---DOM4j 对XMl文档的解析
- [Android ] 多线程操作中更新UI控件的方法
- WedDriver中 如何处理table
- Android学习之ImageView放置gif动态图
- mvn学习