触发器中的 MySQL IF 语句 - ELSE 不执行任何操作

Posted

技术标签:

【中文标题】触发器中的 MySQL IF 语句 - ELSE 不执行任何操作【英文标题】:MySQL IF statement in a trigger- ELSE don't do anything 【发布时间】:2013-04-11 07:54:45 【问题描述】:

我正在尝试在 mysql 中构建一个触发器,该触发器将在将新行插入表后运行。 如果检测到错误,那么我想将该触发器写入表。否则,我不想将错误写入表。我想尽量避免添加无穷无尽的空白行。

这是我的代码:

CREATE 
TRIGGER character_validation4 AFTER INSERT 
ON address FOR EACH ROW 
Begin 
IF(New.city REGEXP '^[^a-zA-Z0-9]') 
THEN 
INSERT INTO errorlog (city, mainprocessid) Values("There is an error with the city", New.ID));
END

但我看到最后一个括号有错误。

有人可以帮忙吗?谢谢

【问题讨论】:

【参考方案1】:

您在 New.ID 之后似乎有一个额外的“)”。试试这个方法

CREATE TRIGGER character_validation4 
AFTER INSERT ON address FOR EACH ROW Begin 
IF(New.city REGEXP '^[^a-zA-Z0-9]') THEN INSERT INTO errorlog (city, mainprocessid) 
Values("There is an error with the city", New.ID);
END IF;
END;

【讨论】:

谢谢,但现在我看到“Unexpected End_of_Input Expecting ';'”和“unexpected end” 添加一个 END IF 并放一个 ;在结束语句之后【参考方案2】:
DELIMITER \\

CREATE 
TRIGGER character_validation4 AFTER INSERT 
ON address FOR EACH ROW 
Begin 
IF(New.city REGEXP '^[^a-zA-Z0-9]') 
THEN 
INSERT INTO errorlog (city, mainprocessid) Values("There is an error with the city", New.ID);
END IF;
END \\

DELIMITER ;

【讨论】:

谢谢,但现在我看到“Unexpected End_of_Input expecting ';'”和“unexpected end”和“unexpected end” 我注意到了 phpmyadmin 标签,所以我假设您在其中输入了这个。将DELIMITER // 添加到查询的开头(create 之前)并在末尾添加DELIMITER ;。编辑:还在最后一个END 之后添加//。查看我的答案的修改。

以上是关于触发器中的 MySQL IF 语句 - ELSE 不执行任何操作的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL数据库重点:流程控制语句自定义函数存储过程触发器事件视图

MySQL中的存储过程

mysql 存储过程

mysql - ORDER BY 语句中的 IF...ELSE 或 CASE

mysql 触发器中的 IF...THEN 语句

在mysql中用if…else语句判断当天是不是为星期天?