PostgreSQL Create Trigger PostgreSQL Trigger PostgreSQL 删除触发器 PostgreSQL Create Trigger 在本节中,我们要了解的工作触发功能,触发功能的创建,PostgreSQL的创建Trigger和实例的的创建Trigger命令。 什么是触发功能? 触发函数与一致的用户定义函数并行。但是Trigger函数可以返回一个Trigger类型的值,并且不带任何参数。 创建Trigger函数的语法 创建Trigger函数的语法如下: CREATE FUNCTION trigger_function() RETURNS TRIGGER LANGUAGE PLPGSQL AS $$ BEGIN -- trigger logic goes here? END; $$ 注意:我们可以通过 PostgreSQL 在任何支持的语言的帮助下生成一个Trigger函数。 一个触发功能可以接受有关通过一个叫做特殊结构,它调用环境中的数据触发数据保存一组局部变量。 例如,在触发事件之前或之后,OLD 和 NEW表示表中行的状态。 PostgreSQL还允许我们使用其他以TG_ 开头的局部变量,例如TG_WHEN和TG_TABLE_NAME。 如果我们指定一个Trigger函数,我们可以修复各种Trigger事件,例如,INSERT、DELETE和Update。 如何创建新Trigger 我们将按照以下过程在 PostgreSQL 中生成一个新的Trigger: Step1:首先,我们将借助CREATE FUNCTION命令创建一个Trigger函数。 Step2:然后,我们将在CREATE TRIGGER命令的帮助下将Trigger函数固定到一个表中。 什么是 PostgreSQL CREATE TRIGGER 命令? CREATE TRIGGER 命令用于创建新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关键字后定义Trigger名称。 BEFORE\ AFTER 当我们需要定义Trigger执行的时间时会使用这些参数,并且可以在事件发生时将其指定为AFTER 或 BEFORE。 Event event 参数用于定义请求Trigger的事件,它可以是INSERT、UPDATE、DELETE 或 TRUNCATE。 Table_name table_name 参数用于定义与Trigger链接的表名。并且在ON关键字之后指定。 [FOR [EACH] { ROW \ STATEMENT}] 这些参数可以定义Trigger的类型,即行级Trigger和语句级Trigger。该FOR EACH ROW子句用于定义行级Trigger。和FOR EACH STATEMENT子句用于指定语句级Trigger。 Trigger_function 用于在EXECUTE PROCEDURE关键字后定义触发函数名称。 注意:语句级Trigger用于实现每个事务,而行级Trigger用于为每一行执行。 例如,让我们假设一个表有 50 行和两个Trigger,当DELETE事件发生时将执行这些Trigger。 如果删除命令删除了 50 行,则行级Trigger将执行 50 次,每删除一行执行一次。但是,无论删除多少行,语句级Trigger都会执行一次。 PostgreSQL 创建Trigger示例 让我们看一个示例来了解PostgreSQL CREATE Trigger命令的工作原理。 我们正在使用CREATE命令的帮助创建一个作为客户端的**新表**,并使用 INSERT 命令插入一些值。 要将客户\创建到组织数据库中,我们使用CREATE命令。 但是,在创建Clients\表之前,如果组织数据库中已经存在类似的表,我们将使用DROP TABLE命令。 DROP TABLE IF EXISTS Clients; 输出 执行上述命令后,我们会得到如下窗口信息:Clients\表不存在。 该客户\表包含各列如CLIENT_ID,名字,姓氏栏,在这里我们使用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、First_name和更改时间(如果是客户端的First_name)。 在上面的命令中,我们有以下内容: 该新表示,新的行会被更新,而OLD表示该行的更新之前。 该FIRST_NAME检索新的姓氏; 另一方面,OLD.first_name检索更新前的名字。 Step2:创建一个新的Trigger 成功创建新函数(log_First_name_changes )后,我们将Trigger函数固定到Trigger名称为First_name_changes的Clients表中。 Trigger函数用于在更新First_name列的值之前自动记录修改,如以下命令所示: CREATE TRIGGER First_name_changes BEFORE UPDATE ON Clients FOR EACH ROW EXECUTE PROCEDURE log_First_name_changes(); 输出 执行上述命令,我们将收到以下消息,显示First_name_changesTrigger已成功创建。 Step3:插入数据 创建后的新功能*()log_First_name_changes*和新的触发为First_name_changes\成功,我们将进入一些值到客户端\与表的INSERT命令的帮助。 INSERT INTO Clients (First_name, Last_name) VALUES ('Mike', 'Ross'), ('Olivia', 'Smith'); 输出 执行上述命令后,我们会得到如下消息窗口,显示两个值已成功插入到Clients\表中。 Step4:检索数据 创建并插入Clients\表的值后,我们将使用SELECT命令从Clients\表中检索数据: SELECT * FROM Clients; 输出 成功执行上述命令后,我们将得到以下结果,显示 PostgreSQL 返回了Clients\表中存在的数据: 假设Olivia Smith 将她的First_name修改为Alivia Smith。 第五步:更新名字 所以在这里,我们在UPDATE命令的帮助下将Olivia 的名字更新为新名字,如下所示: UPDATE Clients SET First_name = 'Alivia' WHERE ID = 2; 输出 在执行上述命令时,我们将收到以下窗口消息,显示指定的值已成功更新。 Step7:验证修改后的数据 现在,我们将核实,如果名字的Olivia已经更新成功与否使用下面的SELECT命令: SELECT * FROM Clients; 输出 成功执行上述命令后,我们将得到以下输出: Olivia 的名字已更新为Alivia到Clients\表中: Step8:验证内容 成功执行上述所有步骤后,最后,我们将借助以下SELECT命令验证Client_audits\表的内容: SELECT * FROM Client_audits; 输出 执行上述命令后,我们将得到以下输出,显示修改已被Trigger记录在Client_audits\表中。 概述 在PostgreSQL 创建Trigger部分,我们学习了以下主题: 我们已经使用 CREATE Function命令为特定表创建一个新函数,其中Trigger函数与一致的用户定义函数并行。 PostgreSQL的创建触发命令用来创建一个新的触发与它的一个例子。 PostgreSQL Trigger PostgreSQL 删除触发器