簡體   English   中英

如何在MySQL中測試IF語句?

[英]How can I test an IF statement in MySQL?

如何在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語句不執行)


注意我想自己測試它,但是我不知道如何在MySQL中測試IF語句。 例如,我想通過以下代碼對其進行測試:

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

但是上面的代碼甚至沒有運行。 這就是為什么我問這個問題。

可以在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;

我想知道,當查詢進入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,因為不是) SELECT NULL IS FALSE (返回0,因為不是)(返回0)以了解我的意思。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM