2015-09-25 120 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錯誤。 –