MySql触发器中的以下if语句有什么问题

时间:2014-09-30 12:47:58

标签: mysql triggers

我正在构建一个触发器,在另一个表更新时更新表。但是,由于某种原因,MySql不喜欢其中的if语句。

方案是,有一个名为Group的表,其具有级别标签配置,存储在level1,level2和level3列中。另一个表,Membership,存储成员配置及其级别标题。

例如,如果某个成员具有level1标题,新手,并且Group_configuration level1中的更新从“新手”变为“新手”,则触发器会将成员标题更新为“新手”。这也适用于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 

我想念的任何想法?

问候

2 个答案:

答案 0 :(得分: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 ;

也许这有帮助?

答案 1 :(得分:1)

在第9行添加分号。我相信你的整个条件因此而混淆。