我正在构建一个触发器,在另一个表更新时更新表。但是,由于某种原因,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
我想念的任何想法?
问候
答案 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行添加分号。我相信你的整个条件因此而混淆。