【发布时间】:2013-01-22 05:19:01
【问题描述】:
我在 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$$
我想要的是这个触发器在更新order_status 列时仅更新order_status。如果更新了任何其他列,则此触发器不应执行任何操作。
实际发生的情况是,此触发器会在任何列更新时更新 completion_date。
谁能向我解释为什么会发生这种情况以及我做错了什么?
order_status 列不为空,可能的值如下:
enum('NEW','OPEN','COMPLETED','CANCELLED','REPLACED')
默认为'NEW'
谢谢
【问题讨论】:
-
order_status可以为空吗?如果列的值已经标记为completed并且您只是在另一列上上升,则触发器会触发? -
这是一个有 5 个不同选项的 ENUM。我只是将其设置为 NOT NULL。我现在就测试一下。
-
@JW。我刚刚用
order_status列详细信息更新了我的问题。 -
@JW。就是这样:)
(NEW.order_status <> OLD.order_status)成功了。谢谢你。您是否应该将其作为答案以便我接受?
标签: mysql sql database triggers