数据库事务并发:概述
2015-06-03 10:06
197 查看
数据库事务并发问题
多个事务同时访问数据库时候,会发生下列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
SQL 92 推荐使用REPEATABLE READ 保证数据的读一致性。
多个事务同时访问数据库时候,会发生下列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
SQL 92 推荐使用REPEATABLE READ 保证数据的读一致性。
相关文章推荐
- FMDB与GCD
- MYSQL + MHA +keepalive + VIP安装配置(二)--MHA的配置
- 用Autoconf检测MySQL软件包的教程
- MYSQL + MHA +keepalive + VIP安装配置(一)--MYSQL安装配置
- oracle ORA-01747(系统保留关键字)user.table.column, table.column 或列说明无效 hibernate映射oracle保留关键字
- SQL
- (转)oracle常用的数据字典
- Oracle命令行工具基本操作及SQL 命令
- OracleLinux-R7-U1-Server-x86_64下安装oracle-11.2.0.4.0_linux_x86和x86_64
- 远程数据库迁移数据
- Mysql写出高质量的sql语句的几点建议
- 省市县3级联动数据库,mysql,单表
- SSDB 和redis benchmark对比
- mysqlbackup (官方使用)
- 使用mysqladmin检测MySQL运行状态的教程
- 安装SQL Server 2012过程中出现“启用windows功能NetFx3时出错”(错误原因、详细分析及解决方法)以及在Windows Server2012上安装.NET Framework 3
- 配置mysql自动备份
- T-SQL 控制流语句
- SQL Server 2012 Enterprise Edition安装过程详解(包含每一步设置的含义)
- Ibatis中sqlmap参数map中还需要套list的情况如何写?