2014-09-30 41 views
0

我構建了一個觸發器,用於在另一個表得到更新時更新表。但是,出於某種原因MySql不喜歡它裏面的if語句。以下if語句在MySql觸發器中出現了什麼問題

這種情況是,存在一個名爲Group的表,該表具有存儲在level1,level2和level3列中的級別標籤配置。另一個表(Membership)用其級別標題存儲成員配置。

例如,如果有一個成員有level1標題,新手,並且Group_configuration level1中有一個從'新手'更新爲'newbie'的更新,觸發器會將成員標題更新爲'newbie'。這也適用於level2和level3。

所以我的觸發代碼如下所示:

CREATE TRIGGER update_member_rank_label AFTER UPDATE ON `group` 
FOR EACH ROW 
begin 
if (NEW.level1 <> OLD.level1) then 
UPDATE membership set level = NEW.level1 where level=OLD.level1 and gid=old.id; 
else if (NEW.level2 <> OLD.level2) then 
UPDATE membership set level = NEW.level2 where level=OLD.level2 and gid=old.id; 
else if (NEW.level3 <> OLD.level3) then 
UPDATE membership set level = NEW.level3 where level=OLD.level3 and gid=old.id 
end if; 
end; 

,但我不斷收到此錯誤:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5 

任何想法我在哪裏錯過?

關於

+0

在定義之前是否有'delimiter'聲明? – 2014-09-30 12:51:41

+0

不,這是問題 – ethereal1m 2014-09-30 18:20:13

回答

2

請檢查您是否將分隔符設置爲別的;在實際創建觸發器之前:

DELIMITER | 
CREATE TRIGGER update_member_rank_label AFTER UPDATE ON `group` 
FOR EACH ROW 
begin 
if (NEW.level1 <> OLD.level1) then 
UPDATE membership set level = NEW.level1 where level=OLD.level1 and gid=old.id; 
else if (NEW.level2 <> OLD.level2) then 
UPDATE membership set level = NEW.level2 where level=OLD.level2 and gid=old.id; 
else if (NEW.level3 <> OLD.level3) then 
UPDATE membership set level = NEW.level3 where level=OLD.level3 and gid=old.id 
end if; 
end; 

DELIMITER ; 

也許這有幫助嗎?

+0

謝謝,是的,這是一些其他語法錯誤的問題... – ethereal1m 2014-09-30 13:10:46

1

在第9行添加一個分號。我相信你的全部條件因此而混淆。

+0

是的,這是一個問題。還應該是'elseif'而不是'else if' – ethereal1m 2014-09-30 18:19:26