前言
还记得我们学习的配置项么?不管是从命令行配置,还是从配置文件中配置的,你是否好奇,我们是怎么知晓这个配置的,例如: 系统的字符集编码格式: character_set_server
,以及客户端的user
、password
等,这些变量是从哪儿来的呢? 这就是我们今天要学习的MySQL
变量。来,我们今天就来学习下吧。
什么是MySQL
系统变量
MySQL
服务器在运行过程中,会使用许许多多的系统变量,每个系统变量都有其默认值,我们可以在配置文件的时候指定它,例如上一篇,我们介绍的系统的字符编码character_set_server
。也可以在运行过程中,我们动态修改其系统变量值。其中系统变量又分为全局系统变量和会话系统变量,前者在修改时需要超级权限才行,后者则不需要。
全局系统变量和会话系统变量关系
我们知道,系统变量区分全局和局部,那么这2者到底是什么关系呢?
我们在启动MySQL
服务器的时候,会产生一个全局变量,这个变量来源于指定参数配置或者配置档,图示如下
启动数据库后,我们在登录数据库中,会产生新的会话变量,该会话变量是全局变量的副本。
我们在修改自身其会话变量的时候,不会影响其他会话变量,而我们在修改全局变量后,当前已经连接上来的会话会保持不变,新会话才会采取新的会话变量,例如:
查看系统变量
在MySQL
中,我们可以使用show variables
,若结果太多,我们可以使用like
进行过滤,如我么想获取datadir
的路径,我们可以使用如下语句进行查询:
show variables like '%datadir%';
例如,我们还想查询一下我们所设置的charset
,我们可以依葫芦画瓢,使用
show variables like '%charset%'
我们可以看到,我们character_set_server
使用的是gbk
。
咦,可能你就要问了,我们之前不是介绍了系统变量有全局和会话之分么? 为什么查询的时候,没有区分呢,哎,别急,是这样的。我们默认使用show variables
其实是查询的会话变量,完整命令为show session variables
,只不过缩写为show variables
。那么我们如何查询全局变量呢?
查询全局变量
show global variables;
查询会话变量
show session variables;
这样来说的话,你懂了么?
设置系统变量
我们知晓了系统变量的区别,那么我们如何设置呢,我们可以使用set
来设置系统变量。
例如
设置会话系统变量
set session 变量名=值
设置全局系统变量
set global 变量名=值
我们来做个小案例,我们将局部会话变量的 character_set_server
修改为utf8
然后创建库。
命令
set session character_set_server="utf8"; show global variables like 'character_set_server'; show session variables like 'character_set_server'; create database pdudo_test123; show create database pdudo_test123;
最后我们发现,其字符编码已经修改为了utf8
。
总结
在本篇学习中,我们知晓了MySQL
有自己的系统变量,而又区分为 全局系统变量 和 会话系统变量,全局系统变量作用域是整个环境,而会话的话呢,是只针对目前的连接,所以全局系统变量在动态设置的时候需要有超级权限才行。 我们在设置系统变量的时候,有2种方式 第一种是在启动的时候添加参数,例如写到配置文件中,第二种是在运行中使用set
命令进行修改。
好了,快动动小手指来试试吧。