使用者定義的變數也稱為會話特定變數。它是一種鬆散類型變量,可以在會話中的某個位置進行初始化,並包含使用者定義變數的值,直到會話結束。
使用者定義變數以符號 @ 為前綴。例如:
@anyVariableName;
有兩種方法可以初始化使用者定義的變數。您可以使用 SET 指令或使用 SELECT 查詢。第一種方法如下:
SET @anyVariableName=anyValue;
第二種方法如下:
SELECT @anyVariableName :=anyValue;
如果您在 SELECT 查詢中不使用冒號 (:),則會將其計算為表達式。結果要麼為真,要麼為假:
mysql> select @m=10;
以下是輸出:
+-------+ | @m=10 | +-------+ | 1 | +-------+ 1 row in set (0.00 sec)
局部變數可以在預存程序、函數等中使用,與DECLARE關鍵字一起使用。不需要像使用者定義變數那樣的@前綴。
局部變數的語法如下。
DECLARE yourVariableName dataType;
注意:局部變數和使用者定義變數之間的主要區別在於,每次呼叫預存程序時,局部變數都會用NULL 值重新初始化,而會話特定變數或用戶定義變數則不會。未使用 NULL 重新初始化。一個使用者設定的使用者定義變數不能被其他使用者看到。給定使用者的任何會話變數都會在使用者退出時自動銷毀。
這裡是會話特定變數和局部變數的演示與預存程序。建立具有局部變數和使用者定義變數的預存程序的查詢如下:
mysql> DELIMITER // mysql> CREATE PROCEDURE sp_LocalAndUserDefinedVariableDemo() -> BEGIN -> DECLARE localVariable int default 10; -> SET localVariable=localVariable+10; -> SET @userVariable=@userVariable+10; -> SELECT localVariable; -> SELECT @userVariable; -> END; -> // Query OK, 0 rows affected (0.39 sec) mysql> DELIMITER ;
現在設定使用者定義變數的值。查詢如下:
mysql> SET @userVariable=10; Query OK, 0 rows affected (0.00 sec)
現在呼叫預存程序。第一次呼叫時,使用者定義變數為 10 10=20,局部變數為 10 10=20。
使用call 指令呼叫預存程序:
mysql> CALL sp_LocalAndUserDefinedVariableDemo();
以下是輸出:
+---------------+ | localVariable | +---------------+ | 20 | +---------------+ 1 row in set (0.32 sec) +---------------+ | @userVariable | +---------------+ | 20 | +---------------+ 1 row in set (0.34 sec) Query OK, 0 rows affected (0.36 sec)
在第二次呼叫中,使用者定義的變數會保存值20 並新增10,如20 10=30,而局部變數再次以10 重新初始化並加入10,如10 10=20。
呼叫預存程序並檢查範例輸出:
mysql> CALL sp_LocalAndUserDefinedVariableDemo();
以下是輸出:
+---------------+ | localVariable | +---------------+ | 20 | +---------------+ 1 row in set (0.00 sec) +---------------+ | @userVariable | +---------------+ | 30 | +---------------+ 1 row in set (0.01 sec) Query OK, 0 rows affected (0.02 sec)
在第三次呼叫中,使用者定義的變數會保存值30 並新增10 ,如30 10=40,而局部變數再次使用10 重新初始化並添加10,如10 10=20。
現在你可以說,在每個過程呼叫中,局部變數都會用某個值重新初始化,該值可能是NULL 或其他值,就像在我的例子中,我提供了預設值10。這意味著它將局部變數設定為值 10每個過程調用,而使用者定義的變數則不然。
以上是MySQL 中的使用者定義變數與局部變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!