我对 sql 完全陌生。请问有人可以帮我创建 PostgreSQL 数据库的触发器吗? 所以我有 1 个名为“tables”的表,其中有 2 个名为“w”(获胜的游戏,整数)和“gp”(玩的游戏,整数)的列。因此,该图是根据修改“w”值自动更新“gp”值的触发器。
表格如下所示:
俱乐部 | 全科医生| w |
尤文图斯| 2 | 2 |
拉齐奥 | 2 | 2 |
我需要创建一个更新触发器,它将在将 1 场获胜游戏添加到“w”列(如 w+1)后更新“gp”列,如 gp+1。会是什么?
我尝试过这样的事情:
CREATE OR REPLACE FUNCTION fn_gp_increment()
RETURNS TRIGGER AS $$
BEGIN
IF NEW.w = OLD.w+1 THEN
UPDATE tables SET NEW.gp = OLD.gp+1;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER gp_increment
BEFORE UPDATE OF w ON tables
FOR EACH ROW
EXECUTE FUNCTION n_gp_increment();
不幸的是,它不起作用。我认为我走错了路,在我看来,我不了解有关触发器的一些基础知识。将不胜感激对此的任何帮助。感谢您的关注。
要在 PostgreSQL 中创建一个触发器,每当 w(赢得的比赛)列增加时自动更新 gp(已玩的比赛)列,您可以按照以下步骤操作:
创建一个函数:触发器将调用此函数来更新 gp 列。
创建触发器:只要 w 列更新,此触发器就会触发该函数。
具体操作方法如下:
第 1 步:创建函数 sql 复制代码 创建或替换函数 update_gp() 回报触发为$$ 开始 -- 检查 w(赢得的比赛)列是否递增 IF NEW.w > OLD.w THEN -- 将 gp(玩过的游戏)列增加相同的数量 新.gp := 旧.gp + (新.w - 旧.w); 结束如果; 返回新的; 结尾; $$ 语言 plpgsql; 第 2 步:创建触发器 sql 复制代码 创建触发器 update_gp_trigger 更新 w ON 表之前 对于每一行 何时(旧.w 与新.w 不同) 执行函数 update_gp(); 解释: 函数 update_gp():该函数检查 w 列是否增加。如果有,它会相应地更新 gp 列。 触发器 update_gp_trigger:此触发器在对 w 列进行任何更新之前调用该函数。 WHEN 子句确保触发器仅在 w 的值实际发生更改时触发。 用法示例 假设您更新了尤文图斯的 w 值:
sql 复制代码 更新表 设置 w = w + 1 WHERE 俱乐部 = '尤文图斯'; 运行此命令后,尤文图斯的 gp 列也会自动增加 1。