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 表不存在。
客户端 表包含各种列,例如 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 数据库中。
假设修改客户名称时,我们要将修改记录在另一个名为 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 表中。
现在,我们将按照以下步骤为指定表创建新函数:
第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 函数已成功创建为相似的数据库。
该函数将旧的名字插入 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 触发器已成功创建。
第3步: 插入数据
在将新功能创建为
log_First_name_changes() ,并将新触发器创建为
First_name_changes 成功后,我们将在 INSERT 命令的帮助下,在
Clients 表中输入一些值。
INSERT INTO Clients (First_name, Last_name)
VALUES ('Mike', 'Ross'),
('Olivia', 'Smith');
输出
执行上述命令后,我们将获得以下消息窗口,该窗口显示两个值已成功插入
客户 表。
第4步: 检索数据
创建并插入
Clients 表的值后,我们将使用 SELECT 命令检索数据从
customer 表中:
输出
成功执行上述命令后,我们将得到以下结果,该结果显示PostgreSQL返回
中存在的数据客户端 表:
假设 Olivia Smith 将她的名字修改为 Alivia Smith 。
第5步: 更新名字
因此,在这里,我们借助 UPDATE 命令将Olivia的名更新为新名称,如下所示:
UPDATE Clients
SET First_name = 'Alivia'
WHERE ID = 2;
输出
在执行上述命令时,我们将获得以下窗口消息,显示指定的值已成功更新。
Step7: 修改后验证数据
现在,我们将使用以下 SELECT 命令来验证是否已成功更新 Olivia 的名:
输出
成功执行以上命令后,我们将获得以下输出: Olivia的名字已更新为 Alivia 到
customer 表:
第8步: 验证内容
成功完成上述所有步骤后,最后,我们将验证
Client_audits 表,借助以下 SELECT 命令:
SELECT * FROM Client_audits;
输出
执行上述命令后,我们将获得以下输出,该输出显示修改已记录在
Client_audits 表。
概述
在 PostgreSQL创建触发器部分中,我们学习了以下主题:
我们使用了CREATE Function 命令为特定的表创建了一个新函数,其中 trigger函数与一致的用户定义函数平行。
PostgreSQL创建触发器命令用于创建带有示例的新触发器。