我有一个表ch_img
,用于存储包含单元格id, filename, width, height, removed_at
的图像。
该表有时会获得宽度和高度的更新,并且永远不会删除行。通过将removed_at
单元格从NULL更新为时间戳来处理删除。
我有另一个表ch_services
,其中一个外键位于image
表格的id
的单元格ch_img
上。
我现在想要更新image
的{{1}}单元格时,将ch_services
removed_at
的单元格设置为NULL。
基本上是一种ch_img
,但没有DELETE,有更新。但是当我更新ON DELETE SET NULL
的{{1}}单元格时,我不想设置为Null。我怎么处理这个?
答案 0 :(得分:1)
有几种不同的方法来处理这样的任务;您提出问题的方式表明使用trigger符合您的需求。这将允许您编写逻辑,查看ch_img
的更改并有条件地更新另一个表。触发器的文档非常好,有很多例子。
您的代码看起来像:
delimiter |
CREATE TRIGGER my_trigger BEFORE UPDATE ON ch_img
FOR EACH ROW
BEGIN
IF NEW.removed_at > 0 THEN
UPDATE ch_services SET img_id = NULL WHERE img_id = NEW.id;
END IF;
END;
|
delimiter ;
但是,有理由不使用您应该考虑的触发器。考虑到您正在秘密隐藏位置编写业务逻辑,远离所有其他代码。很容易忘记触发器或忘记它们甚至存在。
我认为除非性能是一个大问题,否则如果将所有逻辑保存在一个位置,代码将更容易维护。在这种情况下,您可以在代码中编写额外的查询。
还有其他人,我敢肯定,谁会强烈反对我。
触发器肯定会完成工作,但正确的答案取决于处理器毫秒是否比工程师小时更有价值。