用戶定義的變量也稱為會話特定變量。它是一種松散類型變量,可以在會話中的某個(gè)位置進(jìn)行初始化,并包含用戶定義變量的值,直到會話結(jié)束。
用戶定義變量以符號 @ 為前綴。例如:
@anyVariableName;
登錄后復(fù)制
有兩種方法可以初始化用戶定義的變量。您可以使用 SET 命令或使用 SELECT 查詢。第一種方法如下:
SET @anyVariableName=anyValue;
登錄后復(fù)制
第二種方法如下:
SELECT @anyVariableName :=anyValue;
登錄后復(fù)制
如果您在 SELECT 查詢中不使用冒號 (:),則會將其計(jì)算為表達(dá)式。結(jié)果要么為真,要么為假:
mysql> select @m=10;
登錄后復(fù)制
以下是輸出:
+-------+ | @m=10 | +-------+ | 1 | +-------+ 1 row in set (0.00 sec)
登錄后復(fù)制
局部變量可以在存儲過程、函數(shù)等中使用,與DECLARE關(guān)鍵字一起使用。不需要像用戶定義變量那樣的@前綴。
局部變量的語法如下。
DECLARE yourVariableName dataType;
登錄后復(fù)制
注意:局部變量和用戶定義變量之間的主要區(qū)別在于,每次調(diào)用存儲過程時(shí),局部變量都會用 NULL 值重新初始化,而會話特定變量或用戶定義變量則不會。未使用 NULL 重新初始化。一個(gè)用戶設(shè)置的用戶定義變量不能被其他用戶看到。給定用戶的任何會話變量都會在用戶退出時(shí)自動(dòng)銷毀。
這里是會話特定變量和局部變量的演示與存儲過程。創(chuàng)建帶有局部變量和用戶定義變量的存儲過程的查詢?nèi)缦拢?/p>
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 ;
登錄后復(fù)制
現(xiàn)在設(shè)置用戶定義變量的值。查詢?nèi)缦拢?/p>
mysql> SET @userVariable=10; Query OK, 0 rows affected (0.00 sec)
登錄后復(fù)制
現(xiàn)在調(diào)用存儲過程。第一次調(diào)用時(shí),用戶定義變量為 10+10=20,局部變量為 10+10=20。
使用 call 命令調(diào)用存儲過程:
mysql> CALL sp_LocalAndUserDefinedVariableDemo();
登錄后復(fù)制登錄后復(fù)制
以下是輸出:
+---------------+ | 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)
登錄后復(fù)制
在第二次調(diào)用中,用戶定義的變量將保存值 20 并添加 10,如 20+10=30,而局部變量再次用 10 重新初始化并添加 10,如 10+10=20。
調(diào)用存儲過程并檢查示例輸出:
mysql> CALL sp_LocalAndUserDefinedVariableDemo();
登錄后復(fù)制登錄后復(fù)制
以下是輸出:
+---------------+ | 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)
登錄后復(fù)制
在第三次調(diào)用中,用戶定義的變量將保存值 30 并添加 10,如 30+10=40,而局部變量再次使用 10 重新初始化并添加 10,如 10+10=20。
現(xiàn)在你可以說,在每個(gè)過程調(diào)用中,局部變量都用某個(gè)值重新初始化,該值可能是 NULL 或其他值,就像在我的例子中,我提供了默認(rèn)值 10。這意味著它將局部變量設(shè)置為值 10每個(gè)過程調(diào)用,而用戶定義的變量則不然。
以上就是MySQL 中的用戶定義變量與局部變量?的詳細(xì)內(nèi)容,更多請關(guān)注www.92cms.cn其它相關(guān)文章!