每次更新后,将所有字段更新到日记表

时间:2019-02-17 15:01:43

标签: mysql sql triggers journaling

我有此触发器来在每次更新后更新日记表中的单个字段,但我需要一次更新日记中相关行中的所有列,而不是通过命名每个字段并以逗号分隔来更新,该怎么办那?

    DELIMITER //
    CREATE TRIGGER sfo_clone_update_subtotal_invoiced AFTER UPDATE ON sales_flat_order
    FOR EACH ROW BEGIN
        update sales_flat_order_journal set subtotal_invoiced=NEW.subtotal_invoiced where entity_id=new.entity_id;
    END;
DELIMITER ;

1 个答案:

答案 0 :(得分:1)

UPDATE语法允许您设置多个以逗号分隔的列。

update sales_flat_order_journal 
set subtotal_invoiced = NEW.subtotal_invoiced,
    other_column1 = NEW.other_column,
    other_column2 = (/* constant expression, not based on NEW */),
    other_column3 = (SELECT ...scalar expression from some other tables... LIMIT 1),
    updated_at = NOW() 
where entity_id = new.entity_id;

您可以访问NEW.other_column来获取产生触发器的同一行的值。

您可以在触发器主体中DECLARE local variables以帮助计算复杂值。

只要您使用返回一行一行一列的标量SELECT,就可以在触发器主体中使用SELECT语句从其他行或其他表中查询值。

如果您需要触发器中很难完成的更复杂的更新,则可以在应用程序代码中完成,而不是触发器。