我有此触发器来在每次更新后更新日记表中的单个字段,但我需要一次更新日记中相关行中的所有列,而不是通过命名每个字段并以逗号分隔来更新,该怎么办那?
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 ;
答案 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
语句从其他行或其他表中查询值。
如果您需要触发器中很难完成的更复杂的更新,则可以在应用程序代码中完成,而不是触发器。