IF / THEN语句在MySQL中产生语法错误

时间:2017-09-29 17:40:42

标签: mysql

我写了一个非常基本的day X 1 4 8 9 15 9 day X 3 2 10 2 17 7 day X 12 4 19 3 26 9 day X 7 4 14 3 语句,它将成为触发器的一部分,但是当我尝试运行查询时,我收到语法错误:

IF

这是我得到的错误:

  

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“END IF”附近使用正确的语法

我正在使用MySQL 5.6

更新:我现在明白IF (STR_TO_DATE('09/29/2017','%m/%d/%Y') > CURDATE() - INTERVAL 1 DAY) THEN SELECT * FROM apikeys; END IF; / IF语句只能存储在触发器等过程中,并且无法以这种方式正常执行。在将新代码实现到实时系统之前,有没有办法知道触发器是否会成功?此触发器专门控制通过Twilio触发SMS的文本消息队列,因此我真的无法猜测和检查。

1 个答案:

答案 0 :(得分:2)

MySQL中的程序逻辑只能在存储过程,触发器,事件等中使用......您不能有条件地在这些地方之外执行查询(或显然是客户端代码);最接近的是使IF的条件成为查询WHERE条件的一部分。你仍然得到一个结果集,但它将是空的。

SELECT * 
FROM apikeys
WHERE STR_TO_DATE('09/29/2017','%m/%d/%Y') > CURDATE() - INTERVAL 1 DAY
;

编辑:在你绝对需要程序逻辑的情况下;您可以使用它创建存储过程,执行该过程,然后删除该过程。

Edit2:

  

有没有办法知道触发器之前会成功   将新代码实现到实时系统中?

似乎很明显但最好的方法是在测试系统上运行它。如果由于某种原因这不是一个选项,只要您没有使用触发器的NEWOLD功能,您应该能够将其复制到测试过程的主体中并运行它...但如果您有查询尝试修改触发器所在的表,您也不会收到警告。