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

Create a trigger after DELETE and update selected statement

我想在每次向 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; 

您可以使用 NEW.id 来引用 table ArrayA

中当前添加的行

Mysql 在插入查询的情况下将对新添加行的引用保持为 NEW。

我想您不需要条件,因为您只希望 运行 在 INSERT 事件后触发。此外, table ArrayB 中的初始值应该是 默认设置为 0 或在更新期间需要 COALESCE。此外,触发器应该有一个 RETURN 语句。对于 AFTER 触发器,您可以选择 return 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