共計 4218 個字符,預計需要花費 11 分鐘才能閱讀完成。
這篇文章主要介紹“mysql 變量怎么自定義”的相關知識,丸趣 TV 小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“mysql 變量怎么自定義”文章能幫助大家解決問題。
系統變量
簡介
1、系統變量
系統變量分為全局系統變量(需要添加 global 關鍵字)以及會話系統變量(需要添加 session 關鍵字),有時也把全局系統變量簡稱為全局變量,有時也把會話系統變量稱為 local 變量。如果不寫,默認會話級別
全局系統變量針對于所有會話(連接)有效,但 不能跨重啟
在 MySQL 中有些系統變量只能是全局的,例如 max_connections 用于限制服務器的最大連接數;有些系統變量作用域既可以是全局又可以是會話,例如 character_set_client 用于設置客戶端的字符集;有些系統變量的作用域只能是當前會話,例如 pseudo_thread_id 用于標記當前會話的 MySQL 連接 ID
2、用戶自定義變量
每一個 MySQL 客戶機成功連接 MySQL 服務器后,都會產生與之對應的會話。會話期間,MySQL 服務實例會在 MySQL 服務器內存中生成與該會話對應的會話系統變量,這些會話系統變量的初始值是全局系統變量值的復制
會話系統變量僅針對于當前會話(連接)有效。會話期間,當前會話對某個會話系統變量值的修改,不會影響其他會話同一個會話系統變量的值
會話 1 對某個全局系統變量值的修改會導致會話 2 中同一個全局系統變量值的修改
代碼案例
# 查看系統變量
# 查詢全局系統變量
SHOW GLOBAL VARIABLES;
# 查詢會話系統變量
SHOW SESSION VARIABLES;
# 默認查詢的是會話系統變量
SHOW VARIABLES;
# 查詢部分系統變量
# 模糊查詢
SHOW GLOBAL VARIABLES LIKE admin_%
SHOW VARIABLES LIKE character_%
# 查看指定系統變量
SELECT @@global.max_connections;
SELECT @@global.character_set_client;
# 錯誤寫法,由于該變量是會話系統變量
SELECT @@global.pseudo_thread_id;
# 錯誤寫法,由于該變量是全局系統變量
SELECT @@session.max_connections;
# 查看會話系統變量
SELECT @@session.character_set_client;
SELECT @@session.pseudo_thread_id;
# 當變量在全局系統變量或會話系統量中都有時,先查詢會話系統變量,再查詢全局系統變量
SELECT @@character_set_client;
# 修改系統變量的值
# 修改全局系統變量
# 方式 1:SET @@global.max_connections = 161;
# 方式 2:SET GLOBAL max_connections = 171;
# 針對于當前的數據庫實例是有效的,一旦重啟 mysql 服務,就失效了
# 修改會話系統變量
# 方式 1:SET @@session.character_set_client = gbk
# 方式 2:SET SESSION character_set_client = gbk
# 針對于當前會話是有效的,一旦結束會話,重新建立起新的會話,就失效了
用戶變量
簡介
分為會話用戶變量和局部變量
會話用戶變量:作用域和會話變量一樣,只對 當前連接 會話有效
局部變量:只在 BEGIN 和 END 語句塊中有效。局部變量只能在 存儲過程和函數 中使用
定義變量
# 方式 1:“=”或“:=”SET @用戶變量 = 值;
SET @用戶變量 := 值;
#方式 2:“:=” 或 INTO 關鍵字
SELECT @用戶變量
:= 表達式 [FROM 等子句];
SELECT 表達式 INTO @用戶變量 [FROM 等子句];
查看用戶變量的值
SELECT @用戶變量
會話用戶變量代碼案例
# 方式 1:SET @m1 = 1;
SET @m2 := 2;
SET @sum := @m1 + @m2;
# 查看
SELECT @sum;
# 方式 2:SELECT @count := COUNT(*) FROM employees;
SELECT @count;
SELECT AVG(salary) INTO @avg_sal FROM employees;
SELECT @avg_sal;
局部變量簡介
使用 DECLARE 聲明
聲明并使用在 BEGIN ... END 中 (使用在存儲過程、函數中)DECLARE 的方式聲明的局部變量必須聲明在 BEGIN 中的首行的位置
BEGIN
# 聲明局部變量
DECLARE 變量名 1 變量數據類型 [DEFAULT 變量默認值];
DECLARE 變量名 2, 變量名 3,... 變量數據類型 [DEFAULT 變量默認值];
# 為局部變量賦值
SET 變量名 1 = 值;
SELECT 值 INTO 變量名 2 [FROM 子句];
# 查看局部變量的值
SELECT 變量 1, 變量 2, 變量 3;
# 定義變量
DECLARE 變量名 類型 [default 值]; # 如果沒有 DEFAULT 子句,初始值為 NULL
# 賦值
# 方式 1
SET 變量名 = 值;
SET 變量名:= 值;
# 方式 2
SELECT 字段名或表達式 INTO 變量名 FROM 表;
# 查看
SELECT 局部變量名;
局部變量代碼案例
DELIMITER // # 開始
CREATE PROCEDURE test_var() # 創建存儲過程
BEGIN
#1、聲明局部變量
DECLARE a INT DEFAULT 0;
DECLARE b INT ;
# DECLARE a,b INT DEFAULT 0; # 寫法 2
DECLARE emp_name VARCHAR(25);
#2、賦值
SET a = 1;
SET b := 2;
# 將 last_name 賦值給 emp_name
SELECT last_name INTO emp_name FROM employees WHERE employee_id = 101;
#3、使用
SELECT a,b,emp_name;
END //
DELIMITER; # 結束
#調用存儲過程
CALL test_var();
# 舉例 1:聲明局部變量,并分別賦值為 employees 表中 employee_id 為 102 的 last_name 和 salary
DELIMITER // # 開始
CREATE PROCEDURE test_pro()
BEGIN
# 聲明
DECLARE emp_name VARCHAR(25);
DECLARE sal DOUBLE(10,2) DEFAULT 0.0;
# 賦值
SELECT last_name,salary INTO emp_name,sal # 賦值
FROM employees
WHERE employee_id = 102;
# 使用
SELECT emp_name,sal;
END //
DELIMITER ; # 結束
# 調用存儲過程
CALL test_pro();
# 舉例 2:聲明兩個變量,求和并打印 (分別使用會話用戶變量、局部變量的方式實現)# 方式 1:使用會話用戶變量
SET @v1 = 10;
SET @v2 := 20;
SET @result := @v1 + @v2;
# 查看
SELECT @result;
# 方式 2:使用局部變量
DELIMITER //
CREATE PROCEDURE add_value()
BEGIN
# 聲明
DECLARE value1,value2,sum_val INT;
# 賦值
SET value1 = 10;
SET value2 := 100;
SET sum_val = value1 + value2;
# 使用
SELECT sum_val;
END //
DELIMITER ;
#調用存儲過程
CALL add_value();
# 舉例 3:創建存儲過程“different_salary”查詢某員工和他領導的薪資差距,并用 IN 參數 emp_id 接收員工 id,用 OUT 參數 dif_salary 輸出薪資差距結果
DELIMITER // # 開始
CREATE PROCEDURE different_salary(IN emp_id INT, OUT dif_salary DOUBLE) # 輸出 dif_salary DOUBLE
BEGIN
# 分析:查詢出 emp_id 員工的工資; 查詢出 emp_id 員工的管理者的 id; 查詢管理者 id 的工資; 計算兩個工資的差值
# 聲明變量
DECLARE emp_sal DOUBLE DEFAULT 0.0; # 記錄員工的工資
DECLARE mgr_sal DOUBLE DEFAULT 0.0; # 記錄管理者的工資
DECLARE mgr_id INT DEFAULT 0; # 記錄管理者的 id
# 賦值
SELECT salary INTO emp_sal FROM employees WHERE employee_id = emp_id;
SELECT manager_id INTO mgr_id FROM employees WHERE employee_id = emp_id;
SELECT salary INTO mgr_sal FROM employees WHERE employee_id = mgr_id;
SET dif_salary = mgr_sal - emp_sal;
END //
DELIMITER; # 結束
# 調用存儲過程
SET @emp_id := 103;
SET @dif_sal := 0;
CALL different_salary(@emp_id,@dif_sal);
# 查看
SELECT @dif_sal;
關于“mysql 變量怎么自定義”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注丸趣 TV 行業資訊頻道,丸趣 TV 小編每天都會為大家更新不同的知識點。
正文完