用戶定義的變量也稱為會話特定變量。它是一種松散類型變量,可以在會話中的某個位置進行初始化,并包含用戶定義變量的值,直到會話結束。
用戶定義變量以符號 @ 為前綴。例如:
@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 中的用戶定義變量與局部變量?的詳細內容,更多請關注www.92cms.cn其它相關文章!