mysql中全局变量、会话变量、用户变量和局部变量的区别

会话变量:会话变量在每次建立一个新的连接的时候,由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 session variables;

show variables;

- -
查看部分变量 show global variables like 'sql%';

show session variables like 'wait_timeout'; 
show variables like 'wait_timeout%';
show variables like '%wait%';

- -
查看指定变量 select @@global.sql_mode; select @@SESSION.wait_timeout;
select @@local.wait_timeout;
select @@wait_timeout;

select @var;

select count;

设置指定变量 set global sql_mode='';
set @@global.sql_mode=''

set session wait_timeout = 64800;

set local wait_timeout = 64800;

set wait_timeout = 64800;

set @@session.wait_timeout = 64800;

set @@local.wait_timeout = 64800;

set @@wait_timeout = 64800;

set @count=1;
set @count:=11;
select 1 into @count;
select count(price) into @count from items where id= 99;
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]栈下修改这个变量

mysql中全局变量、会话变量、用户变量和局部变量的区别_第1张图片

(2)linux下修改/etc/my.cnf,需重启mysql后生效

vim /etc/my.cnf

重启mysql:
serveice mysql restart(5.5.7版本)
serveice mysqld restart

你可能感兴趣的:(mysql,mysql)