PostgreSQL 创建触发器17 Mar 2025 | 6 分钟阅读 在本节中,我们将了解触发器函数的工作原理、触发器函数的创建、PostgreSQL 创建触发器以及Create Trigger 命令的示例。 什么是触发器函数?触发器函数类似于一致的用户定义函数。但触发器函数可以返回类型为 trigger 的值,并且不接受任何参数。 创建触发器函数的语法创建触发器函数的语法如下 注意:我们可以通过 PostgreSQL 支持的任何语言生成触发器函数。触发器函数可以通过称为触发器数据的特殊结构接受有关其调用环境的数据,该结构保存一组局部变量。 例如,在触发事件之前或之后,OLD 和 NEW 表示表中行的状态。 PostgreSQL 还允许我们使用其他局部变量,这些变量以 TG_ 为前缀,例如 TG_WHEN 和 TG_TABLE_NAME。 如果我们指定触发器函数,我们可以修复各种触发事件,例如 INSERT、DELETE 和 Update。 如何创建新触发器我们将按照以下过程在 PostgreSQL 中生成一个新触发器 步骤 1:首先,我们将借助 CREATE FUNCTION 命令创建一个触发器函数。 步骤 2:然后,我们将借助 CREATE TRIGGER 命令将触发器函数附加到表中。 什么是 PostgreSQL CREATE TRIGGER 命令?CREATE TRIGGER 命令用于创建新触发器。 PostgreSQL CREATE TRIGGER 命令的语法 PostgreSQL CREATE TRIGGER 命令的语法如下 在上面的语法中,我们使用了以下参数,如下表所示:
注意:语句级触发器用于实现每个事务,而行级触发器用于为每一行执行。例如,假设一个表有 50 行和两个触发器,这些触发器将在发生 DELETE 事件时执行。 如果 delete 命令删除了 50 行,则 行级触发器将执行 50 次,每删除一行执行一次。但是,语句级触发器将执行一次,而不管删除了多少行。 PostgreSQL 创建触发器的示例让我们看一个示例来理解 PostgreSQL CREATE Trigger 命令的工作原理。 我们正在借助 CREATE 命令创建一个新表作为 Clients,并使用 INSERT 命令插入一些值。 为了将 Clients 创建到 Organization 数据库中,我们使用 CREATE 命令。 但是,在创建 Clients 表之前,如果 Organization 数据库中已经存在类似的表,我们将使用 DROP TABLE 命令。 输出 执行上述命令后,我们将收到以下窗口消息: Clients 表不存在。 ![]() Clients 表包含各种列,例如 Client_id、First_name、Last_name 列,我们使用 Client_id 作为 GENERATED ALWAYS AS IDENTITY 约束。 输出 执行上述命令后,我们将收到以下消息,该消息显示 Clients 表已成功创建到 Organization 数据库中。 ![]() 假设当客户端的姓名发生修改时,我们希望将修改记录在名为 Client_audits 的不同表中 输出 在执行上述命令后,我们将收到以下消息窗口,该窗口显示 Client_audits 表已成功创建到 Organization 表中。 ![]() 现在,我们将按照以下步骤为指定的表创建一个新函数 步骤 1:创建一个新函数首先,我们使用以下命令创建一个名为 log_First_name_changes 的新函数 输出 执行上述命令后,我们将收到以下消息窗口,该窗口显示 log_First_name_changes 函数已成功创建到类似的数据库中。 ![]() 该函数将旧的 First name 插入到 Client_audits 表中,该表包含 Client_id、First_name 和 更改时间(如果客户端的 First_name)。 在上面的命令中,我们有以下内容
步骤 2:创建一个新触发器成功创建新函数(log_First_name_changes)后,我们将触发器函数附加到 Clients 表,其中 trigger_name 为 First_name_changes。 触发器函数用于在更新 First_name 列的值之前自动记录修改,如以下命令所示 输出 执行上述命令后,我们将收到以下消息,该消息显示 First_name_changes 触发器已成功创建。 ![]() 步骤 3:插入数据成功创建 新函数 log_First_name_changes() 和 新触发器 First_name_changes 后,我们将使用 INSERT 命令的帮助将一些值输入到 Clients 表中。 输出 执行上述命令后,我们将收到以下消息窗口,该窗口显示两个值已成功插入到 Clients 表中。 ![]() 步骤 4:检索数据创建并插入 Clients 表的值后,我们将使用 SELECT 命令从 Clients 表中检索数据 输出 成功执行上述命令后,我们将得到以下结果,这表明 PostgreSQL 返回了 Clients 表中存在的数据 ![]() 假设 Olivia Smith 将她的 First_name 修改为 Alivia Smith。 步骤 5:更新 First_name因此,在这里,我们使用 UPDATE 命令将 Olivia 的名字更新为新的名字,如下所示 输出 执行上述命令后,我们将收到以下窗口消息,该消息显示指定的值已成功更新。 ![]() 步骤 7:在修改后验证数据现在,我们将使用以下 SELECT 命令验证 Olivia 的 First name 是否已成功更新 输出 成功执行上述命令后,我们将得到以下输出:Olivia 的名字已更新为 Alivia 到 Clients 表中 ![]() 步骤 8:验证内容成功执行所有上述步骤后,最后,我们将借助以下 SELECT 命令验证 Client_audits 表的内容 输出 执行上述命令后,我们将收到以下输出,该输出显示触发器在 Client_audits 表中记录了修改。 ![]() 概述在 PostgreSQL Create Trigger 部分,我们学习了以下主题
|
我们请求您订阅我们的新闻通讯以获取最新更新。