不同转换中的并发SQL语句

时间:2017-06-04 11:57:18

标签: sql oracle plsql triggers transactions

在ORACLE中读取documentation PL-SQL CREATE TRIGGER语句,我查看了以下信息:

  

当触发器触发时,触发器引用的表可能是   正在经历SQL语句在其他用户中所做的更改'   交易。在触发器中运行的SQL语句遵循相同的规则   独立的SQL语句。

它基本上表示当从触发器中执行其中一个语句时,适用于两个冲突的独立SQL语句(同时运行)的规则不会改变。

所以我们有一些"通常"关于并发事务的规则,对于这些规则,提到了以下两个:

  

具体做法是:

     

触发器中的查询会看到当前的读取一致性   引用表的视图以及在其中更改的任何数据   事务。

     

触发器中的更新等待释放现有数据锁   在继续之前。

这两条规则看起来像"模糊"对非专家用户。

他们更准确地说是什么意思?

1 个答案:

答案 0 :(得分:2)

  

触发器中的查询会看到当前的读取一致性   引用表的视图以及在其中更改的任何数据   事务。

这意味着触发器看到的数据,就像它在另一个表上执行SELECT一样,表示语句开始运行时该表的状态。触发器不会看到尚未提交的其他会话已更改的行。

  

触发器中的更新等待释放现有数据锁   在继续之前。

当Oracle语句修改行时,该行将被锁定,以阻止其他人更改它,直到该会话提交或回滚其事务。因此,如果您在表A上执行插入操作,您的触发器会在表B上执行更新,但是其他人的会话已经在表B 上对同一行进行了更新,您的交易将会等到他们提交或回滚。