我对MySQL触发器很生气。 MySQL说代码中有错误,但我无法弄清问题是什么。
这是TRIGGER
CREATE TRIGGER UPDATE_COUNTRY
AFTER INSERT
ON `dog`FOR EACH ROW
BEGIN
IF (NEW.export=1)
THEN
IF (NEW.year > (SELECT MAX(`updated_year`) FROM `dog` WHERE `code`=NEW.origin))
THEN
UPDATE `dog` SET `updated_year`= NEW.year, `updated_month`= NEW.month WHERE `code`= NEW.origin;
ELSEIF (NEW.year = (SELECT MAX(`updated_year`) FROM `dog` WHERE `code`=NEW.origine)
AND NEW.month > (SELECT MAX(`updated_month`) FROM `dog` WHERE `code`=NEW.origine AND `updated_year`=NEW.year))
THEN UPDATE `dog` SET `updated_month`=NEW.month WHERE `code`=NEW.origin;
ELSE
RETURN NEW;
END IF;
END IF;
RETURN NEW;
END;
我的SQL说
您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在第13行的''附近使用正确的语法
谢谢大家!
答案 0 :(得分:0)
您的触发器是:
AFTER INSERT ON `dog`FOR EACH ROW
你的第13行是
UPDATE `dog` SET `updated_year`= NEW.year, `updated_month`= NEW.month WHERE `code`= NEW.origin;
这有点糟糕,但您无法使用当前插入/更新/删除数据的同一个表上的触发器更新/插入/删除,因为该表已被锁定。
这是MySQL的限制(是的,并非所有SGDB实际上都有此限制......(
如果你想要更新你的狗,你将需要以不同的方式解决问题。表。您可以使用存储过程来执行插入和更新。