MySQL TRIGGER ON INSERT问题

时间:2015-09-25 15:05:45

标签: mysql triggers

我对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行的''附近使用正确的语法

谢谢大家!

1 个答案:

答案 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实际上都有此限制......(

如果你想要更新你的狗,你将需要以不同的方式解决问题。表。您可以使用存储过程来执行插入和更新。