sql - 在 DELETE 和更新选定语句后创建触发器

标签 sql postgresql database-trigger

我想在每次向 ArrayA 添加新行时创建一个触发器。

这是我使用的代码:

CREATE TRIGGER increasement
    AFTER INSERT
    ON ArrayA
    FOR EACH ROW
    EXECUTE PROCEDURE func_increasement();

添加了一行,我需要更新 ArrayB 中的字段,但问题是: 我需要知道已添加的新行的 ID,以便知道要在 ArrayB 中增加哪一行。

这是我试过的:

CREATE OR REPLACE FUNCTION func_increasement()
    RETURNS trigger AS
$$
BEGIN
    IF (TG_OP = 'INSERT') THEN
        UPDATE ArrayB SET number = number + 1 
        WHERE ArrayB.id = ( SELECT ArrayA.arraya_id FROM ArrayA WHERE (SELECT COUNT(*) FROM ArrayA));
END;
$$ LANGUAGE plpgsql;

这是我用来获取行总数的查询。

    Select Count(*) from ArrayA; 

最佳答案

我假设您不需要条件,因为您只希望在 INSERT 事件之后运行触发器。此外,表 ArrayB 中的初始值应该是 默认设置为 0 或在更新期间需要 COALESCE。此外,触发器应该有一个 RETURN 语句。您可以为 AFTER 触发器返回 NEWNULL,但如果两者都不使用,它将失败。

CREATE OR REPLACE FUNCTION func_increasement()
    RETURNS trigger AS
$$
BEGIN
        UPDATE ArrayB SET number = coalesce(number,0) + 1 
            WHERE ArrayB.id =  NEW.arraya_id;
      RETURN NEW;
END;
$$ LANGUAGE plpgsql;

DEMO

关于sql - 在 DELETE 和更新选定语句后创建触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55709881/

相关文章:

postgresql - 计算sql中的顶点度

iphone - Objective-C 数据库连接

mysql - 如何获取与另一列相关的行数?

sql - 加密密码显示中文

php - 在 MySQL 中插入多行并检查随机字符串,没有长时间延迟(每分钟约 80 行)

基于聚合函数的SQL返回

postgresql - Docker:无法从 Dockerfile 运行 psql 命令

PostgreSQL 触发器阻止另一个触发器工作

sql - 插入后为当前时间戳更新创建触发器

mysql - 触发器不会在 MySql WorkBench 中运行