WEB开发网
开发学院数据库Oracle 在Oracle中使用锁进行并发控制 阅读

在Oracle中使用锁进行并发控制

 2009-03-12 13:10:47 来源:WEB开发网   
核心提示:现在主流的数据库管理系统中,都支持多个事务同时执行,在Oracle中使用锁进行并发控制,这样提高了数据库管理系统的运行效率,试想如果只允许一个事务运行,显然是不正确的,问题就在于T2读取到了T1没有提交的数据,而这个事务又需要很长的时间,那么其他的用户必须一直等待该事务结束

现在主流的数据库管理系统中,都支持多个事务同时执行,这样提高了数据库管理系统的运行效率。试想如果只允许一个事务运行,而这个事务又需要很长的时间,那么其他的用户必须一直等待该事务结束,效率何其低下。执行不同的事务虽然可以提高性能,但是有可能会破坏数据的完整性,所以我们必须在性能和数据完整性之间进行权衡。那么什么是并发控制呢?并发控制是数据库管理系统协调多个运行事务的行为。首先了解一下,并发控制中经常遇到的三个问题。

脏读

我们通过一个products表来解释一下什么是脏读,该products表有一列quantity(数量),现在的值为20。假如现在有两个事务T1和T2,它们都是要更新quantity列,T1将该列值加100,T2将此列减10,但是T1执行失败进行了回滚。我们很容易计算出正确的结果20-10=10,但是如果事务按照以下方式运行,能够得出什么结果?

时间   事务   步骤                             存储值

1      T1     读出quantity的值                20

2      T1      quantity=20+100             120

3      T1      写入quantity值                  120

4      T2      读出quantity(T1未提交)     120

5      T2      quantity=120-10             110

6      T1      回滚(rollback)                  20

7      T2      写入quantity值                 110

以上得出了110的结果,显然是不正确的,问题就在于T2读取到了T1没有提交的数据,我们把这种情况就称之为脏读。

1 2 3 4  下一页

Tags:Oracle 使用 进行

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接