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

kyl*_*lex 19 mysql triggers

我不知道这是否可行,但我active在表中有一个列.每当活动列发生更改时,我想重置date列中的日期,但只有active列发生更改时才会重置.

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

Hai*_*vgi 33

就像是

DELIMITER //
 CREATE TRIGGER updtrigger BEFORE UPDATE ON mytable
     FOR EACH ROW
     BEGIN
     IF NEW.active <> OLD.active THEN
     SET NEW.date = '';     
     END IF;
     END
     //
Run Code Online (Sandbox Code Playgroud)

  • 如果你想要日期是,如果你想要日期+时间使用NOW() (4认同)
  • @stack是的,虽然不是字面意思,`&lt;=&gt;`的意思是“等于,其中`null`被视为可以比较的值”,所以你需要更改为`not NEW.active &lt;=&gt; OLD .活动` (2认同)

小智 15

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

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;
$$
Run Code Online (Sandbox Code Playgroud)

  • 你可以简单地使用`NOT`运算符而不是比较为零,如下面的答案:http://stackoverflow.com/a/24041832/1419007.否则,好的答案. (2认同)