MySQL触发器问题:仅在更改列时触发?

时间:2010-11-04 14:57:54

标签: mysql triggers

我不知道这是否可行,但我在表格中有一个名为active的列。每当活动列发生变化时,我想重置date列中的日期,但如果active列发生更改,则

如果更改了其他列但未更改active列,则日期将保持不变。

2 个答案:

答案 0 :(得分:32)

类似

DELIMITER //
 CREATE TRIGGER updtrigger BEFORE UPDATE ON mytable
     FOR EACH ROW
     BEGIN
     IF NEW.active <> OLD.active THEN
     SET NEW.date = '';     
     END IF;
     END
     //

答案 1 :(得分:15)

在#2示例中遇到IF测试的问题。当其中一个值为null时,&lt;&gt; test返回null。这导致测试无法满足,即使一个值根本不等于null,触发器的操作也不会运行。为了解决这个问题,我想出了一个使用&lt; =&gt;的测试。 (NULL安全相等)。希望这有助于某人。

DELIMITER $$
DROP TRIGGER IF EXISTS updtrigger ;
$$
CREATE TRIGGER updtrigger  AFTER UPDATE
    ON yourTable FOR EACH ROW
BEGIN
    IF ((NEW.active <=> OLD.active) = 0)  THEN
     SET NEW.date = '';     
     END IF;
$$