mysql/mariadb知识点总结 之 数据库变量(参数)管理

目录

MySQL 中的变量

1. 系统变量

2. 状态变量

查看变量的方法

修改变量值/设定变量值


如果我们想要查看mysql的某些属性或状态,我们可以查看mysql的变量,我们也可以通过改变这些变量的值,来设置mysql的工作属性,我们可以把mysql变量理解成mysql的参数,或者说属性值。

MySQL 中的变量

mysql中变量可以分为系统变量与状态变量:

1. 系统变量

系统变量配置了mysql的运行环境属性。

而系统变量从作用域划分,又可以分为全局变量和会话变量:

全局级别的变量:

global variables,作用域为整个mysql服务器。

会话级别的变量:

session variables,作用域为当前会话。

我们可以通过修改这些系统变量达到设置mysql属性的目的。

2. 状态变量

状态变量显示了mysql运行过程中的状态信息。

状态变量也分为全局级别与会话级别,但是用户无法设置状态变量,只能查看。

我们总结一些怎样查看这些变量,以及怎样设置这些变量。

查看变量的方法

我们先来看看怎样查看全局级别的系统变量值。

show global variables;\G

根据变量名查看变量值,比如我想查看所有跟”版本”相关的属性值

show global variables like "%version%";

 

比如想要查看字符集相关的全局设置:

show global variables where variable_name like "%character%";

 

比如想要查看某些日志是否开启或关闭:

show global variables where variable_name like ‘%log%’ and value=’off’;

查看会话级别的所有变量:

会话级别的所有参数往往比全局的更多,因为它不仅继承了全局的部分参数,可能还有一些额外的参数值。

使用如下语句查看会话级别的参数值。

show session variables \G;

当然,使用方法与全局的没有任何区别,只是将global关键字改为了session关键字。

注意:有些变量只存在于全局级别中,有些变量只存在于会话级别中。

如果不指明global或者session,则表示查看会话级别的变量值,如下语句表示显示会话级别的变量:

show variables;

我们也可以使用另一种语法,查看单个全局系统变量或者会话系统变量:

SELECT @@[global.|session.]system_var_name;

但是使用上述语法,需要准确的指明变量名称,比如查看全局系统变量pid_file的值,示例如下:

select @@global.pid_file;

 

或者查看会话变量warning_count的值,示例语句如下:

select @@session.warning_count;

 

但是,我们不能在指明要查看全局变量时,却指定会话级别独有的变量,比如上例中的warning_count变量只存在于会话级别,但是我们偏偏却要使用如下方法查看,则会报错:

反之亦然

因为我们说过,有些变量只存在于全局级别,有些变量只存在于会话级别。

如果你并不清楚你要查询的变量具体属于哪个级别,可以不指明global或者session,如果不指明变量所在级别,则表示优先从会话级别查找对应的变量,如果对应变量存在,则显示其值,如果在会话级别中对应的变量不存在,则会去全局级别中查找对应的变量值,示例如下:

 

在写存储过程时,如果需要调用系统变量的值,可以通过如下方法调用:

@@GLOBAL.var_name
@@SESSION.var_name

同样 @@var_name 表示优先从会话级别获取变量值。

上述示例中的方法为怎样查看系统变量。

我们还可以查询mysql运行中的统计信息或状态数据,使用如下语句即可查看状态变量:

show status; 查询出的结果就是一个列表,易读性较高。

同理,也能够通过like过滤出我们想要查找的变量名称。

而且状态变量也分为全局级别与会话级别。

修改变量值/设定变量值

我们可以通过两种方法修改数据库变量:

(1)运行时修改,如果是运行时修改,修改是否立即生效取决于修改的变量类型:

(2)运行时修改global级别的变量:对修改之前建立的会话没有影响,仅对修改后新建立的会话有效;

(3)运行时修改session级别的变量:仅对当前会话有效,且立即生效;

(4)通过配置文件修改:需重启后生效,并且是永久有效。

我们可以通过set命令,运行时修改对应的变量。

比如,我们先查看一下session级别的某个变量:

 

会话级别中autocommit变量的值为1,我们现在将会话级别中的autocommit变量的值改为0

 

我们将设置系统变量的语法总结如下:

SET GLOBAL var_name = value;
SET @@GLOBAL.var_name = value;
SET SESSION var_name = value;
SET @@SESSION.var_name = value;

不指定级别表示默认为设置会话级别的变量。

SET var_name = value;

状态变量对于用户来说是只读的,所以我们只要学会修改系统变量即可。

在修改系统变量时要记住如下注意点:

(1)运行时修改的变量并非永久有效,重启后将会失效;

(2)运行时修改global级别的变量:对修改之前建立的会话没有影响,仅对修改后新建立的会话有效;

(3)运行时修改session级别的变量:仅对当前会话有效,且立即生效;

(4)如果想要使设定永久有效,需要设置配置文件;但是在不确定的情况下,不要随便修改配置文件,否则将可能会出现无法预计的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值