2015-09-25 88 views
0

我疯了一个MySQL触发器。 MySQL说代码中有一个错误,但我无法弄清楚有什么问题。MySQL TRIGGER ON INSERT问题

这是触发

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行使用正确的语法“''在第13行

谢谢大家!

回答

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居然有此限制......(

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

+0

它给我一个错误,同时更新不同的表格 –

+0

您可能会改写它吗? 是给你一个错误吗? ,查询或存储过程? 错误消息和代码如何?是否与您的帖子相同? –

+0

错误是在查询中,当我尝试使用查询声明触发器时,mySQL给了我错误。我认为这是一个sintax错误。 –