2014-09-30 84 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