在 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 NEW
或 NULL
,但如果两者都不使用,它将失败。
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;
我想在每次向 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 NEW
或 NULL
,但如果两者都不使用,它将失败。
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;