如何在 MySQL 中宣告和使用變數
在這篇教程文章中,我們將解釋如何在 MySQL 資料庫的 SQL 程式碼中宣告變數。
在 SQL 指令碼上,可以在執行一系列命令期間使用變數儲存值,並使用它們代替文字。
MySQL 中的使用者定義變數
MySQL 可以識別不同型別的變數。第一種型別是使用者定義的變數,由作為字首的@
符號標識。在 MySQL 中,你可以訪問使用者定義的變數,而無需事先宣告或初始化它們。如果你這樣做,當初始化時,會給變數分配一個 NULL 值。例如,如果你對一個變數使用 SELECT
,而沒有給它賦值,就像在這種情況下。
SELECT @SomeVariable;
MySQL 會返回一個 NULL 值。
初始化使用者定義的變數
要初始化一個使用者定義的變數,需要使用 SET
或 SELECT
語句。你可以一次初始化許多變數,用逗號分隔每個賦值語句,如下所示。
SET @FirstVar=1, @SecondVar=2;
一旦你給一個變數賦值,它將根據給定的值有一個型別。在前面的例子中,@FirstVar
和@SecondVar
的型別是 int
。
使用者定義的變數的生命週期在會話處於活動狀態時就會持續,而且它對其他會話是不可見的。一旦會話關閉,該變數就會消失。
有 5 種資料型別可以分配給使用者自定義變數。
- 字串(二進位制或非二進位制
- 整數
- 小數
- 浮點
NULL
,它可以與任何型別相關聯。
要給一個變數賦值,可以使用符號 =
或:=
。下面兩個語句具有相同的效果。
SET @MyIntVar = 1;
SET @MyIntVar := 1;
在 SELECT
語句中使用變數用作欄位
變數可以成為 SELECT
語句的欄位列表的一部分。當你在選擇中指定欄位時,你可以混合變數和欄位名,就像這個例子一樣。
SET @IndexVar := 1;
SELECT @IndexVar, ISBN FROM Books;
在 MySQL 中宣告本地變數
區域性變數不需要在其名稱中使用@
字首,但在使用之前必須宣告它們。要宣告一個區域性變數,可以使用 DECLARE
語句,或者在 STORED PROCEDURE
宣告中使用它作為引數。
當你宣告一個區域性變數時,可以選擇給它分配一個預設值。如果你不分配任何預設值,那麼變數將被初始化為一個 NULL 值。
每個變數都生活在一個範圍內,由包含其宣告的 BEGIN ... END
塊限定。
下面的例子說明了使用區域性變數的兩種不同方式:作為過程引數和作為過程內部變數。
DELIMITER $$
CREATE PROCEDURE GetUpdatedPrices(itemcount INT)
BEGIN
DECLARE factor DECIMAL(5, 2);
SET factor:=3.45;
SELECT PartNo, Description, itemcount * factor * ListPrice FROM Catalogue;
END
$$
DELIMITER ;
在前面的例子中,變數 itemcount
被用作引數,將值傳遞給過程。之後在 SELECT
語句中使用該變數來乘以從表中獲得的 ListPrice
欄位。本地變數 factor
用於儲存一個小數值,用來乘以得到的價格。
在 MySQL 中宣告系統變數
還有第三種型別的變數稱為系統變數,用於儲存影響單個客戶端連線的值(SESSION
變數)或影響整個伺服器操作的值(GLOBAL
變數)。
系統變數通常在伺服器啟動時設定。要做到這一點,你可以使用命令列或在選項檔案中包含 SET
語句。但是它們的值可以在 SQL 指令碼中進行修改。
系統變數可以使用雙@
符號作為字首,或者在 SET
語句中使用 GLOBAL
或 SESSION
字樣來識別。區分 GLOBAL
和 SESSION
系統變數的另一種方法是使用第二個字首:global
或 session
。下面是一些如何為系統變數賦值的例子。
-- Alternative ways to set session system variables:
SET interactive_timeout=30000;
SET SESSION interactive_timeout=30000;
SET @@interactive_timeout=30000;
SET @@local.interactive_timeout=30000;
-- Alternative ways to set global system variables:
SET @@global.interactive_timeout=30000;
SET GLOBAL interactive_timeout=30000;
要檢視會話中或伺服器中使用的系統變數,可以使用 SHOW VARIABLES
語句。如果你想得到一些特定變數的值,你可以新增一個比較運算子來過濾這個列表。例如:
SHOW VARIABLES LIKE '%timeout%'