了解 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
的任何更改都不会影响持久数据。
在 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
的任何更改都不会影响持久数据。