22.3 触发器
触发器是特殊的存储过程,它在特定的数据库活动发生时自动执行。触发器可以与特定表上的INSERT
、UPDATE
和DELETE
操作(或组合)相关联。
与存储过程不一样(存储过程只是简单的存储SQL语句),触发器与单个的表相关联。与Orders
表上的INSERT
操作相关联的触发器只在Orders
表中插入行时执行。类似地,Customers
表上的INSERT
和UPDATE
操作的触发器只在表上出现这些操作时执行。
触发器内的代码具有以下数据的访问权:
INSERT
操作中的所有新数据;UPDATE
操作中的所有新数据和旧数据;DELETE
操作中删除的数据。
根据所使用的DBMS的不同,触发器可在特定操作执行之前或之后执行。
下面是触发器的一些常见用途。
- 保证数据一致。例如,在
INSERT
或UPDATE
操作中将所有州名转换为大写。 - 基于某个表的变动在其他表上执行活动。例如,每当更新或删除一行时将审计跟踪记录写入某个日志表。
- 进行额外的验证并根据需要回退数据。例如,保证某个顾客的可用资金不超限定,如果已经超出,则阻塞插入。
- 计算计算列的值或更新时间戳。
读者可能已经注意到了,不同DBMS的触发器创建语法差异很大,更详细的信息请参阅相应的文档。