[英]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
列包含0
或1
。
我只想知道,當查詢不返回任何行時,我的代碼安全嗎? 我的意思是它會拋出錯誤還是什么都不會發生(只是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.