一、概述

MySQL的变量分为以下两种:

  1. 系统变量:配置MySQL服务器的运行环境,可以用show variables查看
    1. 系统变量按其作用域的不同可以分为以下两种:
    2. 分为全局(GLOBAL)级:对整个MySQL服务器有效
    3. 会话(SESSION或LOCAL)级:只影响当前会话
  2. 状态变量:监控MySQL服务器的运行状态,可以用show status查看
    1. 状态变量可以使我们及时了解MySQL服务器的运行状况,可以使用show status语句查看。
    2. 状态变量和相同变量类似,也分为全局级和会话级,show status也支持like匹配查询,比较大的不同是状态变量只能由MySQL服务器本身设置和修改,对于用户来说是只读的,不可以通过SET语句设置和修改它们。 ```sql 可以通过show vairables语句查看系统变量的值: [sql] mysql> show variables like ‘log%’;
      mysql> show variables where Variable_name like ‘log%’ and value=’ON’;
      注意:show variables优先显示会话级变量的值,如果这个值不存在,则显示全局级变量的值,当然你也可以加上GLOBAL或SESSION关键字区别: [sql] show global variables;
      show session/local variables;

```

二、设置和修改系统变量的值

在MySQL服务器启动时,有以下两种方法设置系统变量的值:
1)命令行参数,如:mysqld —max_connections=200
2)选项文件(my.cnf)
在MySQL服务器启动后,如果需要修改系统变量的值,可以通过SET语句:
[plain]
SET GLOBAL var_name = value;
SET @@GLOBAL.var_name = value;
SET SESSION var_name = value;
SET @@SESSION.var_name = value;
如果在变量名前没有级别限定符,表示修改会话级变量。
注意:和启动时不一样的是,在运行时设置的变量不允许使用后缀字母’K’、‘M’等,但可以用表达式来达到相同的效果,如:
[sql]
SET GLOBAL read_buffer_size = 210241024

三、自定义变量

全局变量:可以用于任何地方
声明:set @用户变量名=value;
set @用户变量名:=value;
select @用户变量名:=value;
select 字段 into @变量名 from table;
赋值(更新):和声明语法一样
使用:select @用户变量名

局部变量:只能在BEGIN END 中,且在第一句定义
声明:DECLARE 变量名 类型;
DECLARE 变量名 类型 DEFAULT 值; — 指定默认值
赋值:set 局部变量名=value;
set 局部变量名:=value;
select @局部变量名:=value;
select 字段 into 局部变量名 from table;
使用:select 局部变量名