博主辛苦了,我要打赏银两给博主,犒劳犒劳站长。
【摘要】好久没有更新文章啦,今天写篇文章记录一下最近学习的知识。本文主要介绍一下有关 MySQL 的系统变量知识,通常我们可以 MySLQ 将系统变量分为全局变量和会话变量。
全局变量是在 MySQL 启动的时候自动对它们进行初始化设置默认值,这些默认值可以通过配置文件 my.ini 来修改。
会话变量则是在每次建立新的连接时,由 MySQL 服务器来初始化,MySQL 会将当前的全局变量复制出一份用来作为会话变量。
二者的区别在于对全局变量的修改会影响到整个 MySQL 服务器,但是对会话变量的修改,只会影响当前连接的会话。
查看所有会话变量:
show session variables;
查看所有全局变量:
show global variables;
当为指定是会话还是全局变量时,则默认是会话变量,即:
show variables; # 查看会话变量
当我们要查找某个系统变量时,可以用 like 来搜索:
mysql> show variables like '%autocommit%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set
如果我们想要修改系统变量值,可以用 set 命令来设置,需要注意的是:
在 MySQL 的系统变量中,有些变量是允许被修改的,但有些是只读的、不允许修改的。
修改一般方式为:
set session var_name = var_value;
或
set @@session.var_name = var_value;
例如:
set session autocommit = off; -- 修改会话变量:关闭自动提交
set @@session.autocommit = off; -- 修改会话变量:连接空闲超时最大时间
set session transaction isolation level read committed; -- 修改会话变量:设置事务隔离级别为读取已提交
修改会话变量只会作用于当前会话,不会影响其它连接的会话,并且在当前连接断开后会自动失效。
修改全局变量后会直接作用于 MySQL 服务器,修改时需要 super 权限,修改后其它连接的会话或者建立新的连接会话都会直接生效,但若重启 MySQL 服务器后则会失效。
例如:
初始状态:
已开启两个会话:会话A、会话B
如在会话 A 中设置:
set global autocommit = off;
同时则会在会话 B 中生效,修改之后创建新的会话C,它的 autocommit 都会变成 off:
mysql> show session variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | OFF |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show global variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | OFF |
+---------------+-------+
1 row in set (0.00 sec)
由此可见新的会话C,它的系统变量是复制一份全局变量得到的。
版权归 马富天个人博客 所有
本文标题:《MySQL 系统变量介绍——全局变量和会话变量》
本文链接地址:http://www.mafutian.com/443.html
转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^
顶0
踩0
评论审核未开启 |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
||