如何在MySQL中测试IF语句?
我需要知道,当查询进入IF
语句并且没有返回(选择0行)时会发生什么?
换句话说,当选择no行时,SELECT
查询返回什么?它会返回NULL
吗?如果是的话,这会引发错误吗? IF ( NULL ) THEN ...
?或者在这种情况下,只有IF
的语句不会执行?
实际上,我有一个这样的代码:
IF ( SELECT banned FROM users WHERE id=new.user_id ) THEN
// do stuff
注意: banned
列包含0
或1
。
我想知道的是,当该查询没有返回任何行时,我的代码是否安全?我的意思是它会抛出错误或没有任何反应(只是IF
语句没有执行)?
注意我想测试它的myselft,但我不知道如何在MySQL中测试IF
语句。例如,我想通过以下代码对其进行测试:
BEGIN
IF ( SELECT banned FROM users WHERE id=new.user_id ) THEN
SELECT 'test';
ENDIF;
END
但上面的代码甚至都没有运行。这就是我问过这个问题的原因。
答案 0 :(得分:2)
可以在MySQL存储程序(过程,函数或触发器)的上下文中测试IF
语句.MySQL不支持匿名块。
要测试IF
语句,您可以创建一个过程
DELIMITER $$
CREATE PROCEDURE foo
BEGIN
IF ( some_condition ) THEN
SELECT 'evaluation of some_condition returned TRUE' AS msg;
ELSE
SELECT 'evaluation of some_condition did NOT return TRUE' AS msg;
END IF;
END$$
DELIMITER ;
CALL foo;
答案 1 :(得分:1)
我需要知道,当查询进入IF语句并且什么都不返回时(选择了0行)会发生什么?
这里你真正要问的是一个标量子查询。
标量子查询恰好返回一列,恰好返回一行或零行。返回NULL
并匹配零行是等效的,并且都不会抛出错误。在这两种情况下,子查询的返回值“NULL
。
如果您设法编写一个返回多行的标量子查询(例如在子查询中忘记WHERE
时) ,会抛出错误。但是零行是完美有效的。
IF
测试真实性,以及IS TRUE
...在技术上意味着任何表达两者 IS NOT FALSE
和的任何内容IS NOT NULL
- 满足IF
。如果返回值为FALSE
(0)或NULL
,则会跟踪ELSE
分支(如果存在)。
我强调了上面的IS NOT FALSE
之类的关键词短语,以强调这些是SQL中的逻辑运算符。
尝试查询SELECT 0 IS FALSE
(返回1,因为它是)或SELECT NULL IS NOT TRUE
(返回1,因为它不是)或SELECT NULL IS NOT FALSE
(也返回1,因为它不是' t)SELECT NULL IS FALSE
(返回0,因为它不是)看我的意思。