如何在MySQL中测试IF语句?

时间:2016-08-28 23:14:09

标签: mysql sql if-statement

如何在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列包含01

我想知道的是,当该查询没有返回任何行时,我的代码是否安全?我的意思是它会抛出错误或没有任何反应(只是IF语句没有执行)

注意我想测试它的myselft,但我不知道如何在MySQL中测试IF语句。例如,我想通过以下代码对其进行测试:

BEGIN
    IF ( SELECT banned FROM users WHERE id=new.user_id ) THEN 
       SELECT 'test';
    ENDIF;
END

但上面的代码甚至都没有运行。这就是我问过这个问题的原因。

2 个答案:

答案 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,因为它不是)看我的意思。