首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 變量類型全解析:局部、用戶、會話、全局變量定義與作用域

     編輯:MySQL 綜合教學

一、局部變量

  • 語法:DECLARE var_name[,...] type [DEFAULT value];
  • 僅能在儲存程序/函數 BEGIN...END 塊中定義,必須置於塊首。
  • 作用域:僅限當前 BEGIN...END,塊結束即銷毀。
  • 範例:
CREATE PROCEDURE add(IN a INT, IN b INT)
BEGIN
    DECLARE c INT DEFAULT 0;
    SET c = a + b;
    SELECT c;
END;

二、用戶變量(@var)

  • 定義:SET @a = 1; 或 SELECT @a := 1;
  • 作用域:當前連接會話,斷開連接自動消失。
  • 範例:
SET @a = 1; SET @b = 2;
SELECT @sum := (@a + @b), @dif := (@a - @b);
-- 結果:@sum=3, @dif=-1

三、會話變量(@@session.var / @@var)

  • 服務器為每個連接維護,連接時從全局變量複製初始值。
  • 設置方式:
SET SESSION var_name = value;
SET @@session.var_name = value;
SET var_name = value;  -- 默認 SESSION
  • 查看方式:
SELECT @@var_name;
SELECT @@session.var_name;
SHOW SESSION VARIABLES LIKE '%var%';
  • 作用域:當前連接,斷開失效。需 SUPER 權限才能修改全局變量,但會話變量無需特殊權限。

四、全局變量(@@global.var)

  • 影響服務器整體行為,啟動時從配置文件/命令行初始化。
  • 修改需 SUPER 權限:
SET GLOBAL var_name = value;
SET @@global.var_name = value;
  • 查看:
SELECT @@global.var_name;
SHOW GLOBAL VARIABLES LIKE '%var%';
  • 生命周期:服務器運行期間有效,重啟失效。持久化需修改配置文件(my.cnf)。
  • 注意:SET 不指定作用域默認為 SESSION,修改全局變量必須顯式寫 GLOBAL。

五、總結對照表

類型前綴作用域定義位置權限要求持久化
局部無BEGIN...END儲存程序塊首無否
用戶@連接會話任意處無否
會話@@ / @@session.連接會話任意處無否
全局@@global.全服務器任意處SUPER需改配置文件
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved