注: 本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。
触发器是在对指定表执行指定更改操作(SQL INSERT、UPDATE、DELETE 或 TRUNCATE 语句)时自动运行的一组操作。触发器对于强制执行业务规则、验证输入数据和保留审核跟踪等任务非常有用。
一、触发器介绍
1.1 触发器的用途:
- 强制执行业务规则
- 验证输入数据
- 为不同文件中新插入的行生成唯一值。
- 写入其他文件以进行审计跟踪
- 从其他文件查询以进行交叉引用
- 将数据复制到不同的文件,实现数据一致性
1.2 在业务中使用触发器的好处:
- 加快应用程序开发速度。由于数据库存储触发器,因此不必将触发器操作编码到每个数据库应用程序中。
- 业务规则的全局实施。定义触发器一次,然后将其重用于使用该数据库的任何应用程序。
- 更易于维护。如果业务策略发生更改,则只需更改相应的触发程序,而不需要更改每个应用程序
- 提高客户端/服务器环境中的性能。在结果返回之前,所有规则都在服务器上运行。
- SQL 触发器的实现基于 SQL 标准。它支持大多数编程语言通用的构造。它支持局部变量的声明、控制过程流程的语句、将表达式结果分配给变量以及错误处理。
二、触发器语法
2.1 创建触发器
语法如下
说明
2.2 删除触发器
2.3 触发器函数中的特殊变量
三、示例
下面是触发函数的简单示例:
现在,我们可以创建触发器,该触发器将在执行时触发关联表的触发器中指定的事件。
在上面的触发器函数中,有一个新的关键字“NEW”,它是触发器的 PostgreSQL 扩展。有两个 PostgreSQL 扩展可以触发“OLD”和“NEW”。OLD 和 NEW 不区分大小写。
- 在触发器正文中,使用 OLD 和 NEW 关键字可以访问受触发器影响的行中的列
- 在 INSERT 触发器中,只能使用NEW.col_name。
- 在 UPDATE 触发器中,可以使用 OLD.col_name 在更新行之前引用行的列,NEW.col_name在更新行后引用行的列。
- 在 DELETE 触发器中,只能使用OLD.col_name;没有新行。
以 OLD 命名的列是只读的。您可以引用它(如果您具有 SELECT 权限),但不能修改它。如果您具有 SELECT 权限,则可以引用以 NEW 命名的列。在 BEFORE 触发器中,如果您具有 UPDATE 权限,则还可以使用 SET NEW.col_name = value 更改其值。这意味着您可以使用触发器来修改要插入到新行或用于更新行的值。