并发性和事务隔离级别
当事务在多用户环境中没有彼此隔离时,将会产生以下三种后果:
1)脏读:这种情况发生在一个事务读取还未提交的数据时。例如:
事务1改变了一行数据,而在事务1提交修改之前事务2读取了事务1所改变的行的数据。如果事务1回滚了修改,那末事务2就读取了实际上并不存在的数据。
2)不可重复读:这种情况发生在事务两次读取同一行中的数据却得到不同数值时。例如:事务1读取了一行数据,而事务2改变或删除了那些行并提交了修改。如果事务1再次读取了那一行,那么,事务1就得到了不同的数值(如果那一行被更新)或发现那一行已不存在(如果那一行被删除)。
3)幻影数据:这种情况发生在一行数据满足搜索规则,却在开始没有被看到时。例如:事务1读取了一系列满足搜索规则的行,而事务2插入了一个满足事务1搜索规则的行。如果事务1再次执行查询语句,就会得到不同的一系列行。
在允许多个应用程序同时访问同一数据时,应该保持数据库的一致性和数据完整性。这称为“并发”(concurrency)。DB2使用四个不同的事务隔离级别来实现并发。一个隔离级别决定当数据被访问时,如何锁定数据或让数据与其他进程隔离。DB2支持以下隔离级别:
·可重复读
·读稳定性
·游标稳定性
·未提交读