目录
第91期培训-第五部分—Oracle11g-Oracle SQL对象管理—第18讲—触发器
一、触发器的概念
1、触发器的概念
触发器是 Oracle SQL 中的一种数据库对象,它在满足特定条件时自动触发指定的操作。
触发器可以用于在数据库发生特定事件时执行预定义的操作,例如在插入、更新或删除数据时触发其他操作或检查数据的完整性约束。
2、触发器的语法
CREATE [OR REPLACE] TRIGGER trigger_name {BEFORE | AFTER | INSTEAD OF} {INSERT | UPDATE | DELETE} [OF column_name] ON table_name [FOR EACH ROW] [WHEN (condition)] [DECLARE -- 声明局部变量 BEGIN -- 触发操作 END;] CREATE OR REPLACE TRIGGER 用于创建或替换触发器。 BEFORE、AFTER、INSTEAD OF 指定触发时机,BEFORE 表示在触发事件之前执行,AFTER 表示在触发事件之后执行,INSTEAD OF 表示在代替触发事件时执行(通常用于视图)。 INSERT、UPDATE、DELETE 指定触发事件的类型。 OF column_name 可选,指定列名称,限制触发事件为指定列的变化。 ON table_name 指定触发器所属的表名。 FOR EACH ROW 指定触发器为行级触发器,对于每一行的变化都会触发。 WHEN (condition) 可选,指定触发条件。 DECLARE 和 BEGIN/END 之间可以定义局部变量或声明其他过程、函数等。
3、触发器案例
update_customer_total 触发器会在每次插入新的订单数据时被触发。它会更新 customers 表中对应客户的 total_order_amount 列,增加新插入订单的金额。
CREATE OR REPLACE TRIGGER update_customer_total AFTER INSERT ON orders FOR EACH ROW BEGIN UPDATE customers SET total_order_amount = total_order_amount + :new.order_total WHERE customer_id = :new.customer_id; END;
4、触发器的注意事项:
--触发器应遵循数据库的完整性和业务规则。 --触发器可能会对性能产生影响,特别是在处理大量数据时。 --注意触发器的执行顺序,避免出现循环触发的问题。
5、触发器的优点:
--实现数据完整性约束和业务逻辑的自动执行。 --提供了一种简洁的方式,用于在特定条件下自动触发操作。
6、触发器的缺点:
--触发器可能增加数据库的复杂性,难以维护和调试。 --不恰当或过多的触发器可能导致性能下降。 --对于复杂的逻辑,使用触发器可能不如使用存储过程或应用程序来处理更清晰和有效。
二、触发器的应用案例
1、案例要求
假设有一个 employees 表和一个 audit_log 表,我们希望在 employees 表中的数据更新时,自动将修改的信息插入到 audit_log 表中,以便记录操作的历史。
2、实现步骤
(1)我们需要创建一个 audit_log 表来存储审计日志:
sql CREATE TABLE audit_log ( log_id NUMBER, action_date TIMESTAMP, employee_id NUMBER, old_salary NUMBER, new_salary NUMBER );
(2)我们可以创建一个触发器来实现审计日志的记录:
sql CREATE OR REPLACE TRIGGER employee_audit_trigger AFTER UPDATE ON employees FOR EACH ROW BEGIN INSERT INTO audit_log (log_id, action_date, employee_id, old_salary, new_salary) VALUES (audit_log_seq.NEXTVAL, SYSTIMESTAMP, :old.employee_id, :old.salary, :new.salary); END;
3、实现结果
在上述案例中,employee_audit_trigger 触发器会在每次更新 employees 表中的数据时被触发。它会将更新前后的工资信息记录到 audit_log 表中,以便日后审计和查询。
这个触发器会在每次更新 employees 表中的记录时自动执行插入操作,将旧的和新的工资信息存储在 audit_log 表中。
这个案例展示了一个常见的触发器应用,用于在数据更新时实现审计和历史记录。通过触发器,我们可以确保每次更新操作都会被跟踪和记录,以便后续审查和分析。
需要注意的是,触发器的实际应用可能更复杂,取决于具体的业务需求和数据模型。因此,在使用触发器时,应根据实际情况进行设计和调整,以实现所需的功能和性能。