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

MySQL 變數完整指南:系統變數與使用者變數的區別、作用域與持久化

     編輯:MySQL 綜合教學

前言

MySQL 變數分為「系統變數」與「使用者變數」兩大類,作用域、生命週期與設定方式截然不同。本文系統整理兩類變數的核心差異、操作語法與實務注意事項。

系統變數

分類與作用域

類型關鍵字作用域變更影響範圍持久化
全域變數GLOBAL / @@global.伺服器層級所有新連線(現有連線不受影響)重啟失效,需寫入設定檔
會話變數SESSION / @@session.目前連線僅目前連線連線結束即失效

關鍵特性

  • 每個系統變數皆有編譯時預設值。
  • 啟動時可透過命令列參數或設定檔(my.cnf/my.ini)指定。
  • 運行時多數可用 SET 動態調整:SET GLOBAL var=value; 或 SET SESSION var=value;。
  • 動態修改不跨重啟,永久生效請修改設定檔。

常見操作範例

-- 查看所有系統變數
SHOW VARIABLES;

-- 查看特定變數
SHOW VARIABLES LIKE 'max_connections';

-- 設定全域變數(需 SUPER 權限)
SET GLOBAL max_connections = 500;

-- 設定會話變數
SET SESSION sort_buffer_size = 4194304;

使用者變數

定義與特性

  • 格式:@var_name(前綴 @)。
  • 名稱可含字母、數字、.、_、$,預設字符集 cp1252,不區分大小寫。
  • 連線專屬: 一個客戶端定義的變數,其他客戶端不可見/不可用。
  • 連線結束自動釋放。
  • 跨陳述式傳遞值:在一條語句設定,後續語句引用。

設定與使用

-- 方式 1:SET 語句
SET @my_var = 100;
SET @name = 'John';

-- 方式 2:SELECT ... INTO
SELECT MAX(id) INTO @max_id FROM users;

-- 引用
SELECT @my_var, @name, @max_id;

典型應用場景

  • 預存程序/函數間傳遞參數。
  • 動態視圖過濾條件(參見「MySQL 動態視圖實作」)。
  • 複雜查詢中間結果暫存。

核心差異速查表

維度系統變數使用者變數
前綴無(或 @@)@
作用域GLOBAL / SESSION目前連線
可見性全域可見 / 會話可見僅目前連線可見
持久化設定檔永久,SET 暫時連線結束即失效
用途伺服器行為配置應用邏輯資料暫存

相關延伸閱讀

  • 帶您深入了解 MySQL 使用者連線
  • MySQL 查詢亂碼解決方法
  • 教您如何 MySQL 查詢時間區間
  • 使用 LIMIT 參數優化 MySQL 查詢
  • 使用 MySQL 臨時表加速查詢
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved