MySQL变量


MySQL 变量用于存储临时值或配置信息,主要分为系统变量和用户定义变量两类。以下是具体说明及操作示例:

一、系统变量(System Variables)

由 MySQL 服务器维护,用于控制服务器行为或客户端会话的特性,分为全局变量(影响整个服务器)和会话变量(仅影响当前连接)。

1. 查看系统变量

  • 查看所有变量:SHOW VARIABLES(默认查会话变量)或 SHOW GLOBAL VARIABLES(查全局变量)。
  • 模糊查询:SHOW VARIABLES LIKE '参数名%'(支持通配符 % 或 _)。
  • 直接查询:通过 SELECT 访问变量值(会话变量用 @@session.变量名,全局变量用 @@global.变量名 或 @@变量名)。

2. 修改系统变量

  • 临时修改(重启后失效):使用 SET 命令(会话变量默认当前连接生效,全局变量需 GLOBAL 关键字)。
  • 永久修改:需修改 MySQL 配置文件(如 my.cnf 或 my.ini),重启服务器生效。

二、用户定义变量(User-Defined Variables)

由用户自定义的变量,以 @ 开头,作用域为当前会话(连接断开后失效),支持跨 SQL 语句使用。 示例代码:系统变量与用户变量操作

-- ------------------------------
-- 系统变量操作示例
-- ------------------------------
-- 查看全局变量(如最大连接数)
SHOW GLOBAL VARIABLES LIKE 'max_connections';
-- 或直接查询
SELECT @@global.max_connections;

-- 查看会话变量(如字符集)
SHOW VARIABLES LIKE 'character_set_client';
-- 或直接查询
SELECT @@session.character_set_client;

-- 临时修改全局变量(需权限)
SET GLOBAL max_connections = 200;  -- 调整最大连接数为200
-- 临时修改会话变量(当前连接生效)
SET SESSION wait_timeout = 3600;   -- 调整超时时间为1小时

-- ------------------------------
-- 用户变量操作示例
-- ------------------------------
-- 赋值(方式1:直接赋值)
SET @num1 = 10;
SET @num2 := 20;  -- 支持 := 避免与 SQL 关键字冲突

-- 赋值(方式2:查询结果赋值)
SELECT COUNT(*) INTO @user_count FROM users;  -- 将 users 表行数存入 @user_count

-- 使用用户变量
SELECT @num1 + @num2 AS sum_result;  -- 输出 30
SELECT @user_count AS total_users;    -- 输出 users 表行数

注意事项

  • 系统变量修改权限:修改全局变量需 SUPER 权限(如 max_connections)。
  • 用户变量类型:自动推断类型(字符串、数值等),混合类型运算可能导致隐式转换。
  • 作用域限制:用户变量仅在当前会话有效,不同客户端(如 Navicat、命令行)的变量不共享。