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]栈下修改这个变量

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

vim /etc/my.cnf

重启mysql:
serveice mysql restart(5.5.7版本)
serveice mysqld restart
  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值