九月 9, 2023
摘要:在本教程中,您将了解 PostgreSQL 触发器、为什么应该使用触发器以及何时使用它们。
目录
什么是 PostgreSQL 触发器
PostgreSQL 触发器是每当与表关联的事件发生时自动调用的函数。与表关联的事件可以是:INSERT、UPDATE、DELETE 或 TRUNCATE。
触发器是与表关联的特殊的用户定义函数。要创建新的触发器,首先定义一个触发器函数,然后将该触发器函数绑定到表。
触发器和用户定义函数的区别在于,触发器是在触发事件发生时自动调用的。
PostgreSQL 触发器类型
PostgreSQL 提供两种主要类型的触发器:
- 行级触发器
- 语句级触发器
两种类型之间的区别在于调用触发器的次数和时间。
例如,如果您发出一条修改 20 行的UPDATE
语句,则行级触发器将被调用 20 次,而语句级触发器将被调用 1 次。
您可以指定触发器是在事件之前还是之后调用。如果在事件之前调用触发器,它可以跳过当前行的操作,甚至更改正在更新或插入的行。如果在事件之后调用触发器,则所有更改都可供触发器使用。
何时使用触发器
如果数据库被各种应用程序访问,并且您希望在数据库中保持跨操作能力,只要表的数据被修改,触发器就会自动运行。例如,如果您希望保留数据历史记录,而不要求应用程序具有检查每个事件(例如INSERT
或UDPATE
)的逻辑。
此外,您还可以使用触发器来维护复杂的数据完整性规则,这些规则除了在数据库级别实施,无法在其他地方实现。例如,当向customer
表中添加新行时,还必须在银行和信用表中创建其他行。
使用触发器的主要缺点是,您必须知道触发器存在,并了解其逻辑才能弄清楚数据更改时的影响。
PostgreSQL 触发器对比 SQL 标准触发器
尽管 PostgreSQL 实现了 SQL 标准,但 PostgreSQL 中的触发器有一些特定的功能:
- PostgreSQL 可以触发
TRUNCATE
事件的触发器。 - PostgreSQL 允许您在视图上定义语句级触发器。
- PostgreSQL 要求您定义用户定义的函数作为触发器的操作,而 SQL 标准允许您使用任何 SQL 命令。
概括
-
触发器是当表上出现
INSERT
、UPDATE
、DELETE
或TRUNCATE
时自动调用的函数。 -
PostgreSQL 支持行级和语句级触发器。