会话变量:会话变量在每次建立一个新的连接的时候,由MYSQL来初始化。MYSQL会将当前所有全局变量的值复制一份。来做为会话变量。(也就是说,如果在建立会话以后,没有手动更改过会话变量与全局变量的值,那所有这些变量的值都是一样的。)
全局变量:在服务器启动时,会将每个全局变量初始化为其默认值(可以通过命令行或选项文件中指定的选项更改这些默认值)。mysql有很多全局变量,包括系统的一些基本信息,以及mysql的一些基本配置(例如 connect_timeout 默认10s)都可以在全局变量中查到。
用户变量:用户变量就是用户自己定义的变量,也是在连接断开时失效,定义和使用相比会话变量来说简单许多。
局部变量:局部变量通常出现在存储过程中,用于中间计算结果,交换数据等等,当存储过程执行完,变量的生命周期也就结束了。
1.查看mysql的所有变量的值
SHOW [GLOBAL|SESSION] VARIABLES;
查看全局变量:
SHOW GLOBAL VARIABLES;
查看会话变量:
SHOW SESSION VARIABLES;
SHOW VARIABLES;
2.查看mysql的单个变量的值
SHOW [GLOBAL|SESSION] VARIABLES [LIKE 匹配的模式];
查看全局变量:
SHOW GLOBAL VARIABLES LIKE 'wait_timeout';
SHOW GLOBAL VARIABLES LIKE 'wait_time%';
SHOW GLOBAL VARIABLES LIKE '%wait%';
SELECT @@GLOBAL.wait_timeout;
查看会话变量:
SHOW SESSION VARIABLES LIKE 'wait_timeout';
SHOW VARIABLES LIKE 'wait_timeout%';
SHOW VARIABLES LIKE '%wait%';
SELECT @@SESSION.wait_timeout;
select @@local.wait_timeout;
SELECT @@wait_timeout;
查看用户变量:
select @count;
查看局部变量:
declare count int(4);
select count;
3.设置变量的值
全局变量:
SET GLOBAL default_storage_engine = MyISAM;
SET @@GLOBAL.default_storage_engine = MyISAM;
会话变量:
SET SESSION default_storage_engine = MyISAM;
SET LOCAL default_storage_engine = MyISAM;
SET default_storage_engine = MyISAM;
SET @@SESSION.default_storage_engine = MyISAM;
SET @@LOCAL.default_storage_engine = MyISAM;
SET @@default_storage_engine = MyISAM;
用户变量:
set @count=1;
set @count:=11;
select 100 into @count;
select count(price) into @count from items where id= 99;
局部变量:
declare count int(4);
declare sum int(4);
set count=1;
set sum:=0;
刷新即时生效
flush privileges
几种变量的对比使用
操作类型 | 全局变量 | 会话变量 | 用户变量 | 局部变量(参数) |
出现的位置 | 命令行、函数、存储过程 | 命令行、函数、存储过程 | 命令行、函数、存储过程 | 函数、存储过程 |
定义的方式 | 只能查看修改,不能定义 | 只能查看修改,不能定义 | 直接使用,@var 形式 | declare count int(4); |
有效生命周期 | 服务器重启时恢复默认值 | 断开连接时,变量消失 | 断开连接时,变量消失 | 出了函数或存储过程的作用域,变量无效 |
查看所有变量 | show global variables; |
| - | - |
查看部分变量 | show global variables like 'sql%'; |
| - | - |
查看指定变量 | select @@global.sql_mode; | select @@SESSION.wait_timeout; |
|
|
设置指定变量 | set global sql_mode=''; set @@global.sql_mode='' |
| set @count=1; | set count=1; set count:=101; select 1 into count; |
注意:
1.设置系统变量的语句中省略了作用范围,默认的作用范围就是SESSION
2.A客户端修改了会话变量的某个值,则其它客户端的不会更改。
3.有的时候发现修改不生效,需要关闭会话重新启动,也就是退出一下重新登录。但是发现重新启动mysql服务器变量又不生效,最好的办法就是修改mysql启动的默认值。
(1)windows下D:\MySQL Server 8.0\my.ini,在[mysqld]栈下修改这个变量
(2)linux下修改/etc/my.cnf,需重启mysql后生效
vim /etc/my.cnf
重启mysql:
serveice mysql restart(5.5.7版本)
serveice mysqld restart