在Linux系统上使用Informix数据库时,触发器是一种强大的工具,用于在特定的数据库事件发生时自动执行SQL语句。以下是Informix触发器的基本使用指南,包括创建触发器的语法和示例。
触发器的基本概念
- 触发器事件:包括INSERT、UPDATE和DELETE。
- 触发时间:可以在触发事件执行之前(BEFORE)、之后(AFTER)或过程中(FOR EACH ROW)执行。
- 触发器操作:定义激活触发器时执行的SQL语句,可以是INSERT、DELETE、UPDATE或EXECUTE PROCEDURE。
创建触发器的语法
INSERT触发器
CREATE TRIGGER trigger_name INSERT ON table_name BEFORE [WHEN (condition)] (trig_action1, trig_action2,...) FOR EACH ROW [WHEN (condition)] (trig_action1, trig_action2,...) AFTER [WHEN (condition)] (trig_action1, trig_action2,...) [DISABLED | ENABLED];
DELETE触发器
CREATE TRIGGER trigger_name DELETE ON table_name BEFORE [WHEN (condition)] (trig_action1, trig_action2,...) FOR EACH ROW [WHEN (condition)] (trig_action1, trig_action2,...) AFTER [WHEN (condition)] (trig_action1, trig_action2,...) [DISABLED | ENABLED];
UPDATE触发器
CREATE TRIGGER trigger_name UPDATE [OF (column, column,...)] ON table_name BEFORE [WHEN (condition)] (trig_action1, trig_action2,...) FOR EACH ROW [WHEN (condition)] (trig_action1, trig_action2,...) AFTER [WHEN (condition)] (trig_action1, trig_action2,...) [DISABLED | ENABLED];
示例
创建基表和监控表
CREATE TABLE table_trigger1 ( id1 CHAR(10), -- id1, 唯一 name1 CHAR(20), -- 姓名 PRIMARY KEY(id1) ); CREATE TABLE table_trigger2 ( id2 CHAR(10), -- id2, 对应操作基表的id1, 这里的id2不能设置为主键, 因为对基表的某一行可以操作多次 kind VARCHAR(1), -- 类型, 用I来表示insert, U来表示update, D来表示delete time2 DATETIME YEAR TO FRACTION(5) -- 时间, 表示操作发生的时间 );
创建触发器
-- Insert触发器 CREATE TRIGGER trigger_insert INSERT ON table_trigger1 REFERENCING NEW AS new FOR EACH ROW INSERT INTO table_trigger2 (id2, kind, time2) VALUES (new.id1, 'I', CURRENT); -- Update触发器 CREATE TRIGGER trigger_update UPDATE ON table_trigger1 REFERENCING OLD AS old FOR EACH ROW INSERT INTO table_trigger2 (id2, kind, time2) VALUES (old.id1, 'U', CURRENT); -- Delete触发器 CREATE TRIGGER trigger_delete DELETE ON table_trigger1 REFERENCING OLD AS old FOR EACH ROW INSERT INTO table_trigger2 (id2, kind, time2) VALUES (old.id1, 'D', CURRENT);
注意事项
- 触发器名称在数据库中必须唯一,且不超过18个字符,以字母开始。
ENABLED
是默认值,表示触发器在触发事件发生时自动激活。DISABLED
表示生成触发器但关闭,即执行触发事件时不激活触发器。
通过上述步骤,您可以在Linux Informix数据库中创建和使用触发器,以实现数据的一致性和完整性。