38.2. 数据更改的可见性
如果您在触发器函数中执行 SQL 命令,并且这些命令访问触发器所针对的表,则您需要了解数据可见性规则,因为它们确定这些 SQL 命令是否会看到触发器所包含的数据更改。开除。简要地:
-
语句级触发器遵循简单的可见性规则:语句级
BEFORE
触发器看不到语句所做的任何更改,而语句级AFTER
触发器可见所有修改。 -
在行级
BEFORE
触发器中执行的 SQL 命令自然不引起触发器触发的数据更改(插入,更新或删除),因为尚未发生。 -
但是,在行级
BEFORE
触发器中执行的 SQL 命令将看到先前在同一外部命令中处理过的行的数据更改的影响。这需要谨慎,因为这些变化事件的 Sequences 通常不可预测。影响多行的 SQL 命令可以按任何 Sequences 访问这些行。 -
同样,行级
INSTEAD OF
触发器将看到由同一外部命令中的INSTEAD OF
触发器的先前触发引起的数据更改的影响。 -
当触发行级
AFTER
触发器时,外部命令所做的所有数据更改都已完成,并且对调用的触发器函数可见。
如果您的触发函数是用任何标准过程语言编写的,则以上声明仅在声明为VOLATILE
的情况下适用。在任何情况下,声明为STABLE
或IMMUTABLE
的函数都不会看到调用命令所做的更改。
有关数据可见性规则的更多信息,请参见Section 46.4。 Section 38.4中的示例包含这些规则的演示。