PostgreSQL教程

PostgreSQL 创建触发器

在本节中,我们将了解触发函数的工作,触发器函数的创建,PostgreSQL创建触发器 ,以及 Create Trigger命令的示例。

什么是Trigger函数?

A触发功能与一致的用户定义功能平行。但是 trigger 函数可以返回带有类型触发器的值,并且不接受任何参数。

创建触发函数的语法

创建触发函数的语法如下:
CREATE FUNCTION trigger_function() 
   RETURNS TRIGGER 
   LANGUAGE PLPGSQL
AS $
BEGIN
  --trigger logic goes here?
END;
$
注意: 我们可以通过PostgreSQL在任何支持的语言的帮助下生成触发函数。
触发函数可以通过名为 Trigger Data 的特殊结构来接受有关其调用环境的数据,该结构包含一组局部变量。
例如,在触发事件之前或之后, OLD和NEW 表示表中行的状态。
PostgreSQL 还允许我们使用以 TG _ 开头的其他局部变量,例如 TG_WHEN 和 TG_TABLE_NAME。
如果指定了触发函数,则可以修复各种触发事件,例如插入,删除和更新。

如何创建新触发器

我们将按照以下过程进行生成PostgreSQL中的新触发器:
步骤1: 首先,我们将在 CREATE FUNCTION (创建功能)命令的帮助下创建触发函数。
步骤2: 然后,在 CREATE TRIGGER 命令的帮助下,将触发函数固定在一个表上。

什么是PostgreSQL CREATE TRIGGER命令?

CREATE TRIGGER命令用于创建新触发器。
PostgreSQL的语法CREATE TRIGGER命令:
PostgreSQL的语法 CREATE TRIGGER 命令如下:
CREATE TRIGGER trigger_name 
 {BEFORE | AFTER} { event }
  ON table_name
  [for [EACH] { ROW | STATEMENT }]
  EXECUTE PROCEDURE trigger_function
在上面的语法中,我们使用了以下参数,如下表所示:
参数 说明
trigger_name 用于在 TRIGGER 关键字之后定义触发器名称。
之前|之后 这些参数在需要定义触发器执行时间时使用,当事件发生时,可以将其指定为 AFTER或BEFORE 。
事件 event参数用于定义请求触发器的事件,它可以是 INSERT,UPDATE,DELETE或TRUNCATE。
Table_name table_name参数用于定义表名,该表名与触发器链接。它是在 ON 关键字之后指定的。
[FOR [EACH] {ROW | STATEMENT}] 这些参数可以定义触发器的类型,它们是行级触发器和 Statement Level触发器。 FOR EACH ROW 子句用于定义行级触发器。 FOR EACH STATEMENT 子句用于指定语句级触发器。
Trigger_function 用于在 EXECUTE PROCEDURE 关键字之后定义触发功能名称。
注意: 语句级触发器用于实现每个事务,而行级触发器用于执行每行。
例如,我们假设一个具有50行和两个触发器的表将在发生 DELETE 事件时执行。
如果 delete命令删除了50行,则行级触发器将被执行50次,每删除一次行一次。但是,无论删除多少行,都会执行一次语句级触发器。

PostgreSQL创建触发器的示例

让我们看一个示例示例,以了解 PostgreSQL CREATE Trigger 命令的工作。
我们正在创建一个新表,作为 Clients ,在 CREATE 命令的帮助下,并使用INSERT命令插入一些值。
要创建 Clients 放入组织数据库,我们使用 CREATE 命令。
但是,在创建 之前客户 表,我们将使用 DROP TABLE 命令如果组织数据库中已经存在类似的表格。
DROP TABLE if EXISTS Clients;
输出
执行上述命令后,我们将获得以下窗口消息: Clients 表不存在。
PostgreSQL创建触发器
客户端 表包含各种列,例如 Client_id,First_name,Last_name 列,其中我们将 Client_id 用作 GENERATED ALWAYS AS IDENTITY约束 >。
CREATE TABLE Clients(
   ID int GENERATED ALWAYS AS IDENTITY,
   First_name VARCHAR(50) NOT null,
   Last_name VARCHAR(50) NOT null,
   PRIMARY KEY(ID)
);
输出
在执行上述命令时,我们将收到以下消息,该消息显示 Clients >表已成功创建到 Organization 数据库中。
PostgreSQL创建触发器
假设修改客户名称时,我们要将修改记录在另一个名为 Client_audits 的表中:
CREATE TABLE Client_audits (
   ID int GENERATED ALWAYS AS IDENTITY,
   Client_id int NOT null,
   First_name VARCHAR(50) NOT null,
   changed_on TIMESTAMP(5) NOT null
);
输出
执行上述命令后,我们将获得以下消息窗口,其中显示 Client_audits 表已成功创建到 Organization 表中。
PostgreSQL创建触发器
现在,我们将按照以下步骤为指定表创建新函数:

第1步: 创建新函数

首先,我们使用以下命令创建一个名为 log_First_name_changes 的新函数:
CREATE OR REPLACE FUNCTION log_First_name_changes()
  RETURNS TRIGGER 
  LANGUAGE PLPGSQL
  AS
$
BEGIN
  if NEW.First_name <> OLD.First_name THEN
     INSERT INTO Client_audits(Client_id,First_name,changed_on)
     VALUES(OLD.ID,OLD.First_name,now());
  END IF;
return NEW;
END;
$
输出
执行上述命令后,我们将获得以下消息窗口,显示 log_First_name_changes 函数已成功创建为相似的数据库。
PostgreSQL创建触发器
该函数将旧的名字插入 Client_audits 表,其中包含 Client_id,名字和更改时间(如果是客户的名字)。
在上面的命令中,我们具有以下内容:
NEW 表示将要更新的新行,而 OLD 表示更新前的行。 strong> 名字检索新的姓氏;另一方面, OLD.first_name 检索更新。

第2步: 创建新的触发器

成功创建新函数( log_First_name_changes)后,我们会将触发器函数修复为 Clients 表,其中trigger_name为 First_name_changes 。
trigger函数用于在 First_name值之前自动记录修改 strong>列已更新,如以下命令所示:
CREATE TRIGGER First_name_changes
 BEFORE UPDATE
 ON Clients
 for EACH ROW
 EXECUTE PROCEDURE log_First_name_changes();
输出
在执行上述命令时,我们将收到以下消息,该消息显示 First_name_changes 触发器已成功创建。
PostgreSQL创建触发器

第3步: 插入数据

在将新功能创建为 log_First_name_changes() ,并将新触发器创建为 First_name_changes 成功后,我们将在 INSERT 命令的帮助下,在 Clients 表中输入一些值。
INSERT INTO Clients (First_name, Last_name)
VALUES ('Mike', 'Ross'),
('Olivia', 'Smith');
输出
执行上述命令后,我们将获得以下消息窗口,该窗口显示两个值已成功插入 客户 表。
PostgreSQL创建触发器

第4步: 检索数据

创建并插入 Clients 表的值后,我们将使用 SELECT 命令检索数据从 customer 表中:
SELECT * FROM Clients;
输出
成功执行上述命令后,我们将得到以下结果,该结果显示PostgreSQL返回 中存在的数据客户端 表:
PostgreSQL创建触发器
假设 Olivia Smith 将她的名字修改为 Alivia Smith 。

第5步: 更新名字

因此,在这里,我们借助 UPDATE 命令将Olivia的名更新为新名称,如下所示:
UPDATE Clients
SET First_name = 'Alivia'
WHERE ID = 2;
输出
在执行上述命令时,我们将获得以下窗口消息,显示指定的值已成功更新。
PostgreSQL创建触发器

Step7: 修改后验证数据

现在,我们将使用以下 SELECT 命令来验证是否已成功更新 Olivia 的名:
SELECT * FROM Clients;
输出
成功执行以上命令后,我们将获得以下输出: Olivia的名字已更新为 Alivia 到 customer 表:
PostgreSQL创建触发器

第8步: 验证内容

成功完成上述所有步骤后,最后,我们将验证 Client_audits 表,借助以下 SELECT 命令:
SELECT * FROM Client_audits;
输出
执行上述命令后,我们将获得以下输出,该输出显示修改已记录在 Client_audits 表。
PostgreSQL创建触发器

概述

在 PostgreSQL创建触发器部分中,我们学习了以下主题:
我们使用了CREATE Function 命令为特定的表创建了一个新函数,其中 trigger函数与一致的用户定义函数平行。 PostgreSQL创建触发器命令用于创建带有示例的新触发器。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4