MySQL 5.6中的变量

发布时间:2020-04-07 20:48:09 作者:独指蜗牛
来源:网络 阅读:2573

这篇文章介绍的是MySQL  5.6中的变量,基本是我以前学习MySQL 5.6手册时整理而来。

 

基础概念

MySQL中的变量可分为以下几种:

1、 MySQL系统变量:该类型变量反映了MySQL服务器是如何配置的。每一个系统变量都有一个默认值。系统变量可以在MySQL配置文件中进行设置,或使用MySQL启动选项进行设置。大多数系统变量都可以在MySQL运行时使用SET命令进行动态修改。

2、 MySQL状态变量:该类型变量反映了MySQL服务器的运行状态。

 

变量按作用范围可分为:

1、 全局变量(global):对MySQL服务器全局生效。

2、 会话变量(session):仅对单个客户端会话有影响。

有些MySQL选项只有全局变量或会话变量,而有些则同时有全局变量和会话变量。全局和会话变量的关联是这样的:

1、 当MySQL服务启动时,它会初始每一个全局变量为默认值。这个默认值可以在配置文件中或使用MySQL启动选项进行修改。

2、 MySQL也会为每一个客户端连接维护一个会话变量集。当客户端连接MySQL服务时,它所有的会话变量都会初始化为相应全局变量的当前值。对于少数系统变量,它的会话值可能不会被初始化为相应全局变量的值,具体可查询MySQL官方手册。

 

系统变量根据是否可动态修改(dynamic),分为:

 

完整的变量属性列表可以在MySQL参考手册中查询得到。比如,可以了解到某一个变量是系统变量还是状态变量,是全局变量还是还是变量还是两种都有,是动态变量还是非动态变量。

 

查看变量的值

要查看MySQL的所有默认系统变量值(忽略配置文件中的设置),使用命令:

[root@gw ~]# mysqld --no-defaults --verbose --help

要查看MySQL的所有默认系统变量值(读取配置文件中的设置后的),使用命令:

[root@gw ~]# mysqld --verbose --help

 

SHOW命令查看系统变量的值,语法格式为:

mysql> SHOW [GLOBAL | SESSION] VARIABLES [like_or_where]

mysql> SHOW GLOBAL VARIABLES;

mysql> SHOW VARIABLES;

mysql> SHOW SESSION VARIABLES;

mysql> SHOW VARIABLES LIKE 'innodb_buffer%';

mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_buffer%';

 

另外,也可以使用 SELECT 语句来查看系统变量的值。比如:

mysql> SELECT @@global.sql_mode, @@session.sql_mode, @@sql_mode;

对于在表达式中使用 @@var_name 这种形式引用变量的值(而不是使用 @@global. 或 @@session.),MySQL会返回会话变量的值(如果存在),否则会返回全局变量的值。有 @@global. 前缀的是显式指定查看全局变量的值,有 @@session. 前缀的是显式指定查看会话变量的值。

 

SHOW命令查看状态变量的值,语法格式为:

mysql> SHOW [GLOBAL | SESSION] STATUS [like_or_where]

mysql> SHOW GLOBAL STATUS;

mysql> SHOW STATUS;

mysql> SHOW SESSION STATUS;

mysql> SHOW LOCAL STATUS;

 

使用FLUSH STATUS命令可以将一些状态变量的值重置为0:

mysql> FLUSH STATUS;

 

设置变量的值

要修改系统变量的值,有几种方式:在MySQL配置文件中修改,使用MySQL启动选项修改,或在MySQL启动后使用SET命令动态修改。每一个变量具体支持哪几种方式,见MySQL官方手册中的列表。

 

在设置系统变量的值时,变量值为容量大小的,默认单位为字节(bytes),或者也可以显式指定单位为K、M、G(大小写均可,分别表示1024、10242、10243字节)。变量值为文件名的,可以使用绝对路径名,但如果使用相对路径,那么路径是相对于MySQL数据目录。

 

动态变量的值可以在MySQL运行时使用SET命令进行修改:

SET GLOBAL max_connections = 1000;

SET @@global.max_connections = 1000;

SET SESSION sql_mode = 'TRADITIONAL';

SET @@session.sql_mode = 'TRADITIONAL';

SET @@sql_mode = 'TRADITIONAL';

mysql> SET max_connections = 1000;

ERROR 1229 (HY000): Variable 'max_connections' is a

GLOBAL variable and should be set with SET GLOBAL

SET @x = 1, SESSION sql_mode = '';

同时设置多个变量时,最接近的GLOBAL或SESSION修饰符会应用于后面没有修饰符的变量。示例:

SET GLOBAL sort_buffer_size = 1000000, SESSION sort_buffer_size = 1000000;

SET @@global.sort_buffer_size = 1000000, @@local.sort_buffer_size = 1000000;

SET GLOBAL max_connections = 1000, sort_buffer_size = 1000000;

如果SET命令中的某一个变量设置失败了,那么整个语句都会失败,其它变量也就不会被修改。

SET @@session.max_join_size=DEFAULT;

SET @@session.max_join_size=@@global.max_join_size;

当然,并不是所有系统变量的值都可以被设置为DEFAULT,那样会报错。不允许将值DEFAULT分配给用户自定义变量、存储过程或函数参数、或存储程序的本地变量。

SELECT @@global.sql_mode, @@session.sql_mode, @@sql_mode;

对于在表达式中使用 @@var_name 这种形式引用变量的值(而不是使用 @@global. 或 @@session.),MySQL会返回会话变量的值(如果存在),否则会返回全局变量的值。这与语句 SET @@var_name = expr 是不相同的,那个语句总是设置的会话变量的值。

[root@gw ~]# mysql --max_allowed_packet=16M                              //启动选项中,这种用法可以

[root@gw ~]# mysql --max_allowed_packet=16*1024*1024                     //启动选项中,这种用法不行

相对地,下面第二个是可以的,第一个则不行:

mysql> SET GLOBAL max_allowed_packet=16M;                                //SET命令中,这种用法不行

mysql> SET GLOBAL max_allowed_packet=16*1024*1024;                       //SET命令中,这种用法可以

 

自定义变量

SET命令还可以用于设置自定义变量。在变量名前加上 @ 修饰符,就是表示设置自定义变量。变量名称可以由字母、数字、"."、"_"和"$"组成。当然,在以字符串或者标识符引用时也可以包含其他字符(例如:@'my-var',@"my-var",或者@`my-var`)。

mysql> SET @x = 1;

 

自定义变量是会话级别的变量,作用域仅限于当前会话。当前会话终止时,其所有的会话变量将会被释放,包括自定义变量。使用SELECT命令可以查看自定义变量的值:

mysql> SELECT @x;

 

 

 

推荐阅读:
  1. 如何应用mySql变量
  2. mysql的全局变量与局部变量介绍

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

数据库 mysql 5.6

上一篇:基于Metronic的Bootstrap开发框架经验总结(9)--实现Web页面内容的打印预览和保存操作

下一篇:java七大排序——7_归并排序

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》