在ORACLE中读取documentation PL-SQL CREATE TRIGGER
语句,我查看了以下信息:
当触发器触发时,触发器引用的表可能是 正在经历SQL语句在其他用户中所做的更改' 交易。在触发器中运行的SQL语句遵循相同的规则 独立的SQL语句。
它基本上表示当从触发器中执行其中一个语句时,适用于两个冲突的独立SQL语句(同时运行)的规则不会改变。
所以我们有一些"通常"关于并发事务的规则,对于这些规则,提到了以下两个:
具体做法是:
触发器中的查询会看到当前的读取一致性 引用表的视图以及在其中更改的任何数据 事务。
触发器中的更新等待释放现有数据锁 在继续之前。
这两条规则看起来像"模糊"对非专家用户。
他们更准确地说是什么意思?
答案 0 :(得分:2)
触发器中的查询会看到当前的读取一致性 引用表的视图以及在其中更改的任何数据 事务。
这意味着触发器看到的数据,就像它在另一个表上执行SELECT
一样,表示语句开始运行时该表的状态。触发器不会看到尚未提交的其他会话已更改的行。
触发器中的更新等待释放现有数据锁 在继续之前。
当Oracle语句修改行时,该行将被锁定,以阻止其他人更改它,直到该会话提交或回滚其事务。因此,如果您在表A上执行插入操作,您的触发器会在表B上执行更新,但是其他人的会话已经在表B 上对同一行进行了更新,您的交易将会等到他们提交或回滚。