我写了一个非常基本的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的文本消息队列,因此我真的无法猜测和检查。
答案 0 :(得分:2)
MySQL中的程序逻辑只能在存储过程,触发器,事件等中使用......您不能有条件地在这些地方之外执行查询(或显然是客户端代码);最接近的是使IF的条件成为查询WHERE条件的一部分。你仍然得到一个结果集,但它将是空的。
SELECT *
FROM apikeys
WHERE STR_TO_DATE('09/29/2017','%m/%d/%Y') > CURDATE() - INTERVAL 1 DAY
;
编辑:在你绝对需要程序逻辑的情况下;您可以使用它创建存储过程,执行该过程,然后删除该过程。
Edit2:
有没有办法知道触发器之前会成功 将新代码实现到实时系统中?
似乎很明显但最好的方法是在测试系统上运行它。如果由于某种原因这不是一个选项,只要您没有使用触发器的NEW
或OLD
功能,您应该能够将其复制到测试过程的主体中并运行它...但如果您有查询尝试修改触发器所在的表,您也不会收到警告。