我对 MySQL 触发器感到抓狂。 MySQL 说代码中有错误,但我不知道问题出在哪里。
这是触发器
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 行 '' 附近使用的正确语法
谢谢大家!
最佳答案
您的触发器是:
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 实际上都有这个限制......(
如果您想更新“dog”表,则需要采用不同的方法。您可以使用存储过程来执行插入和更新。
关于MySQL TRIGGER ON INSERT 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32785219/