我不知道这是否可行,但我在一个表中有一个名为active
的列。每当更改active
列时,我想重设date
列中的日期,但仅当更改了active
列时。
如果更改其他列而不是active
列,则日期将保持不变。
我不知道这是否可行,但我在一个表中有一个名为active
的列。每当更改active
列时,我想重设date
列中的日期,但仅当更改了active
列时。
如果更改其他列而不是active
列,则日期将保持不变。
类似于什么东西
DELIMITER //
CREATE TRIGGER updtrigger BEFORE UPDATE ON mytable
FOR EACH ROW
BEGIN
IF NEW.active <> OLD.active THEN
SET NEW.date = '';
END IF;
END
//
SET NEW.date = CURDATE();
吗? - kylex<=>
代替 <>
不是更好吗? - stack<=>
表示“相等”,其中 null
被视为可比较的值。 因此,您需要更改为 not NEW.active <=> OLD.active
。 - Brian Leishman在第2个示例中,我遇到了IF测试的问题。当其中一个值为null时,<>测试会返回null。这导致测试未被满足,即使一个值根本不等于null,触发器的操作也不会被运行。为了解决这个问题,我想出了使用<=>(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;
$$
NOT
运算符代替与零的比较,就像这个答案中所示:https://dev59.com/rGzXa4cB1Zd3GeqPRTvH#24041832。否则,回答不错。 - user2428118$$
之前不应该加上END
吗? - Ricky McMaster