新的MySql触发器,只是学习。
CREATE TRIGGER MyTrigger
AFTER UPDATE ON MyTable
FOR EACH ROW
BEGIN
IF (new.field1 < 0 or new.field1 > 5) THEN
UPDATE new SET new.field1 = old.field1;
END IF;
END;
目标是保持field1的值相同,如果更新将其置于范围之外。 但是,它将它设置为0.我做错了什么?这段代码应该怎么样?
答案 0 :(得分:-1)
这是一个有希望让你开始的例子:
DELIMITER ~
CREATE TRIGGER `so_13547992_trigger`
BEFORE UPDATE ON `so_13547992`
FOR EACH ROW BEGIN
IF ( NEW.`field1` < 0 OR NEW.`field1` > 5 ) THEN
SET NEW.`field1` = OLD.`field1`;
END IF;
END;
~
为什么它会更好?首先,您的示例触发器是递归的,您无法更新由更新触发的触发器中的同一个表。
其次,new
语句中的UPDATE
不是表名,您需要明确指定一个。
它似乎根本不是合法的触发器,当您尝试创建它时,您的服务器是否会抱怨?您是否可以实际显示SHOW CREATE TRIGGER `your_trigger`;
以确保它真的被创建并且看起来就像是将其粘贴在上面?
即使您的示例可行,您也试图对表的所有行进行无约束更新,而不是对您要更新的行进行无约束更新,您应该有一个WHERE
子句;鉴于第一和第二个问题得到了解决。