触发事件

触发器事件指定哪个 DML 语句可以启动触发器。事件可以是视图上的 INSERT 、DELETE 或 UPDATE 操作,或是查询表的 SELECT 操作。每个 CREATE TRIGGER 语句必须指定一个触发器事件。作为触发事件的实例的任何 SQL 语句都称为触发语句

对于每个,您只能定义一个由 INSERT 、DELETE 、UPDATE 或 SELECT 语句的激活的触发器。对于每个视图,您可以定义定义由 INSERT 、DELETE 或 UPDATE 语句激活的 INSTEAD OF 触发器。同一表或视图上的多个触发器可以被不同类型的触发器事件或同一类型的触发器事件激活。

如果触发表具有指定 ON DELETE CASCADE 的引用约束,则您不能指定 DELETE 事件。

您负责确保触发语句在表上有或没有触发器操作时都返回相同的结果。另请参阅 Action 子句 触发操作部分。

来自外部数据库服务器的触发语句可以激活触发器。

如以下示例所示,newtab 上的 Insert 触发器(由 dbserver1 管理)由来自dbserver2 的 INSERT 语句激活。该触发器就像在 dbserver1 上生成的 INSERT 那样执行。
-- Trigger on stores_demo@dbserver1:newtab
        CREATE TRIGGER ins_tr INSERT ON newtab
        REFERENCING new AS post_ins
        FOR EACH ROW(EXECUTE PROCEDURE nt_pct (post_ins.mc));
        -- Triggering statement from dbserver2
        INSERT INTO stores_demo@dbserver1:newtab
        SELECT item_num, order_num, quantity, stock_num, manu_code,
        total_price FROM items;

GBase 8s 也支持视图上的 INSTEAD OF 触发器。这些触发器在一个触发 DML 操作引用该指定视图时被启动。INSTEAD OF 触发器使用视图上指定的触发器操作替换该触发器操作事件,而不是执行触发 INSERT 、DELETE 或 UPDATE 操作。对于每种事件类型(INSERT 、DELETE 或 UPDATE),视图可以至多定义多个 INSTEAD OF 触发器。