(2021.12.20 Mon)
SQL中的變量分為user-defined variable, local variable和system variables.
User-defined Variable(UDV)
用戶定義變量僅供一位用戶使用,不能被其他用戶使用。UDV在聲明和使用時需要在前面加上@
符號。UDV也叫會話變量(session variable)。
設(shè)置UDV可使用SET
或SELECT
指令酗捌。注意到使用SELECT
指令賦值時,賦值符號為:=
。
SET @var1 = 1, @var2 = 2;
SELECT @var3 := 3, @var4 := 4;
SET @var6 = CAST(b'1000001' AS UNSIGNED);
SET @var7 = b'1000001';
UDV可定義的數(shù)據(jù)類型包括integer, decimal, floating-point, binary or nonbinary string, or NULL value短绸。
調(diào)用方法
SELECT place FROM table1 WHERE var_s BETWEEN @var3 AND @var4;
可在沒有聲明的情況下直接調(diào)用則返回NULL
SELECT @var5;
局部變量Local Variables
局部變量用DECLARE
聲明,并標(biāo)明默認(rèn)值用DEFAULT
筹裕。如果沒有指定默認(rèn)值醋闭,則默認(rèn)為NULL
。
局部變量用于存儲過程朝卒,其作用域是BEGIN...END
標(biāo)記的范圍证逻。
DELIMITER //
CREATE PROCEDURE sp_test(var1 INT)
BEGIN
DECLARE start INT unsigned DEFAULT 1;
DECLARE finish INT unsigned DEFAULT 10;
SELECT var1, start, finish;
SELECT * FROM places WHERE place BETWEEN start AND finish;
END; //
DELIMITER ;
mysql > CALL sp_test(5);
System Variables
(2021.12.21 Tues)
系統(tǒng)變量,也叫全局變量抗斤。對所有客戶端生效囚企,只有super權(quán)限才能修改系統(tǒng)變量。其定義格式為
SET GLOBAL <var_name> = <var_value>;
SET @@global.<var_name> = <var_value>;
對系統(tǒng)變量可以通過表達(dá)式賦值瑞眼,但是需要注意龙宏,服務(wù)器已經(jīng)啟動后(server runtime)使用SET
賦值時可以使用乘號(*
)等符號。而在服務(wù)器啟動時(server startup)則不能通過運算符號對其賦值伤疙。下面的第一行和第四行都是正確的银酗,其他錯誤。
$> mysql --max_allowed_packet = 16M
$> mysql --max_allowed_packet = 16*1024*1024
mysql> SET GLOBAL max_allowed_packet = 16M;
mysql> SET GLOBAL max_allowed_packet = 16*1024*1024;
在mysql console上徒像,查看系統(tǒng)變量的指令是
mysql> show variables;
可以指定SESSION
和GLOBAL
關(guān)鍵詞來找到對應(yīng)的變量
SHOW GLOBAL VARIABLES LIKE '%ASDF%';
SHOW SESSION VARIABLES LIKE '%vnbm%';
Persist a global system variable to the mysqld-auto.cnf
file (and set the runtime value):
SET PERSIST max_connections = 1000;
SET @@PERSIST.max_connections = 1000;
Persist a global system variable to the mysqld-auto.cnf
file (without setting the runtime value):
SET PERSIST_ONLY back_log = 1000;
SET @@PERSIST_ONLY.back_log = 1000;