我在MySQL表中有一个触发器。表有大约20列。
DELIMITER $$
CREATE
DEFINER=`root`@`localhost`
TRIGGER `completion_date_update`
BEFORE UPDATE ON `orders`
FOR EACH ROW
BEGIN
IF NEW.`order_status` = 'COMPLETED' THEN
SET NEW.`completion_date` = NOW();
END IF;
IF NEW.`order_status` != 'COMPLETED' THEN
SET NEW.`completion_date` = NULL;
END IF;
END$$
我想要的是在更新列completion_date
时触发更新order_status
列 的触发器。如果更新任何其他列,则此触发器不应执行任何操作
实际发生的是这个触发器在任何列更新时更新completion_date
。
任何人都可以向我解释为什么会发生这种情况以及我做错了什么?
order_status
列不是NULL并且具有可能的值,如下所示:
enum('NEW','OPEN','COMPLETED','CANCELLED','REPLACED')
默认为'NEW'
由于
答案 0 :(得分:1)
您还应该比较order_status
是否已更改且新值是COMPLETED
IF (NEW.order_status <> OLD.order_status) AND (NEW.order_status = 'COMPLETED') THEN
SET NEW.completion_date = NOW();
END IF;
您可以删除下面的其他IF
。