0

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

    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 ;
4

1 回答 1

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以获取生成触发器的同一行的值。

您可以在触发器主体中声明局部变量以帮助计算复杂值。

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

如果您需要在触发器中难以完成的更复杂的更新,我会在应用程序代码中执行此操作,而不是触发器。

于 2019-02-17T16:05:43.460 回答