了解 SQL 中的 BEFORE UPDATE 触发器

Understanding the BEFORE UPDATE trigger in SQL

在 PostgreSQL 中,如果我想对 UPDATE 命令进行更改,显然我应该在 BEFORE UPDATE 上触发。例如:

CREATE OR REPLACE FUNCTION trigger_update_fn() RETURNS trigger AS
$$ BEGIN
    new.updated := current_timestamp;
    new.created := old.created;         --  override changes with original value
    RETURN new;
END $$ LANGUAGE plpgsql;

CREATE TRIGGER trigger_update
BEFORE UPDATE ON data
FOR EACH ROW
EXECUTE PROCEDURE trigger_update_fn();

在SQL服务器中没有BEFORE UPDATE触发器,你凑合用AFTER UPDATE触发器。关键是,在我看来,如果触发器在 PostgreSQL 更新后应用,它应该起作用,但它当然不起作用。

问题是为什么正确的触发器是BEFORE UPDATE触发器,我应该用AFTER UPDATE触发器做什么?

BEFORE 触发器可以修改即将插入到table (NEW) 中的行。 AFTER 触发器在 之后运行 table 已被修改,因此对 NEW 的任何更改都不会影响持久数据。