PostgreSQL 触发器 表更新或插入时触发函数

PostgreSQL 触发器 表更新插入时触发函数 使用于对某张表增删改时需要触发某个操作

1.首先,建立触发器需要执行的函数fun,此处函数为每次插入的时候更新当前年份

REATE OR REPLACE FUNCTION tableA_insert_trigger_fun() RETURNS TRIGGER AS $$
  BEGIN
   NEW.fqyear= to_char(current_date,'yyyy');
   RETURN NEW;
  END;
$$ LANGUAGE plpgsql;

2.建立触发器trigger,插入后执行更新年份函数tableA_insert_trigger_fun,问题解决

CREATE TRIGGER insert_tableA_trigger2
after insert on tableA
for each row execute procedure tableA_insert_trigger_fun();

### 创建和使用PostgreSQL触发器 #### 触发器概述 在PostgreSQL中,触发器是一种特殊的存储过程,它会在指定的上发生某些事件(如`INSERT`、`UPDATE``DELETE`)自动执行。这使得开发者能够在不影响应用程序逻辑的情况下实现复杂的业务规则。 #### 创建触发器的一般流程 为了创建一个触发器,通常先要定义一个函数作为触发动作体,该函数可以由PL/pgSQL其他编程语言编写而成。之后再基于此函数建立相应的触发器对象[^3]。 ```sql -- 定义触发器函数 CREATE OR REPLACE FUNCTION example_function() RETURNS trigger AS $$ BEGIN -- 这里放置触发逻辑代码 END; $$ LANGUAGE plpgsql; -- 建立触发器 CREATE TRIGGER example_trigger BEFORE INSERT ON teaches FOR EACH ROW EXECUTE PROCEDURE example_function(); ``` 上述例子展示了如何构建一个名为`example_trigger`的触发器,在向`teaches`插入新纪录之前调用`example_function()`来进行预处理工作[^4]。 对于更复杂的需求,比如想要跟踪数据库结构的变化,则可采用事件触发器的形式来捕捉DDL语句的发生刻,进而完成诸如日志记录之类的任务[^2]。 #### 使用带有条件判断的触发器候希望仅当满足一定条件下才激活触发行为,这可以在触发器内部加入`IF`分支结构用于控制流走向: ```sql CREATE OR REPLACE FUNCTION conditional_update_func() RETURNS trigger AS $$ DECLARE old_value integer := OLD.value; -- 获取旧值 BEGIN IF NEW.value != old_value THEN -- 判断是否有变化 RAISE NOTICE 'Value changed from % to %', old_value, NEW.value; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER check_updates AFTER UPDATE OF value ON some_table FOR EACH ROW WHEN (OLD.* IS DISTINCT FROM NEW.*) EXECUTE PROCEDURE conditional_update_func(); ``` 这段脚本实现了每当`somme_table`里的某条记录被更新且其字段`value`确实发生了改变的候发出通知消息的功能。 #### 实际应用场景举例 假设存在一张学生成绩单格`score`,其中包含学生ID(`studentId`)及其对应的数学成绩(`math`)两列数据。现在希望通过设置触发器的方式确保每次有新的分数录入是已有分数修改后都能及同步到其他关联系统之中去[^5]。 ```sql CREATE TABLE score ( studentId INT PRIMARY KEY, math INT NOT NULL ); -- 插入初始测试数据... INSERT INTO score VALUES (1001,89),(1002,76); ``` 综上所述,通过合理运用PostgreSQL提供的强大而灵活的触发机制,能够极大地简化应用开发过程中涉及的数据一致性维护等工作量。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值