如何在AFTER UPDATE触发器中引用最近更新的行

时间:2018-12-24 10:49:28

标签: mysql sql triggers

AFTER DELETEAFTER INSERT触发器中,您可以使用OLD.desired_idNEW.desired_id引用新删除/插入的行。但是,如何在AFTER UPDATE触发器中引用该行?例如,当我在行中翻转开关后,我需要从刚翻转过布尔值的行中获取ID,例如THIS.desired_id之类的东西?

2 个答案:

答案 0 :(得分:1)

根据您的问题,可以通过以下模板查询来实现。根据您的架构进行必要的更改。使用触发器内部可用的表,该表中的内容已更新为表。

ALTER TRIGGER 'trigger_name_afterupdate'
ON [*db*].[*table*]
AFTER UPDATE
AS
BEGIN 
    UPDATE [*db*].[*table*]
    SET last_updated_by = SYSTEM_USER
    **(your flip switch condition goes here)**
    FROM *db*.*table* x
    WHERE EXISTS (SELECT 1 FROM inserted i WHERE i.id = x.id);
END

答案 1 :(得分:0)

INSERT FOR EACH ROW中,触发器new引用了插入的行。没有已删除的行,因此old是没用的。

反之,当触发动作是DELETE时。然后old引用已删除的行,而new则在没有插入行的情况下是没有用的。

如果操作为UPDATE,则oldnew都引用一行。 old引用更改之前的行,new引用更改后的行。

因此,您可以根据需要的版本使用old.desired_idnew.desired_id,即更改前的版本或更改后的版本。