回顾前面,我们在讲慢查询、事务的隔离、查询缓存时,都用到了MySQL的系统变量:
这节我们开始做个总结性地研究研究MySQL的“variables”。
“variables”意思是变量,这里指的是MySQL的系统变量。
在cmd下执行“show variables;”
总共可以查到331个系统变量。
想要精确查找,可这样:
show variables like '%%';
like子句与select中的like子句是一样的用法。
也可以使用where子句。
系统变量的作用:
这些系统变量我们是不是可以通过“set 变量名 = 变量值”语句做修改,那作用就很明显了,这些系统变量就是MySQL的配置参数,通过修改这些参数可以对MySQL做设置,达到想要的效果。就像前面我们开启慢查询功能,修改InnoDB表的事务隔离级别,开启查询缓存。
系统变量的设置:
1)可以在客户端(cmd或者PHP脚本或者Navicat)用SQL语句:
set [ global | session ] 变量名 = 变量值 做设置。
说明:
系统变量又分为两种变量:全局变量(global)和会话变量(session)。全局变量影响服务器的全局操作,会话变量影响当前客户端相关操作,也就是当前客户端一断连接,额外设置的会话变量就失效了。
“set global 变量名 = 变量值;”可设置全局变量。
“set session 变量名 = 变量值;”可设置会话变量。
“set 变量名 = 变量值;”默认设置的是会话变量。
服务器启动时,将所有全局变量初始化为默认值。可以在配置文件或命令行中指定的选项来更改这些默认值。服务器启动后,通过连接服务器并执行SET GLOBAL var_name语句可以更改动态全局变量。要想更改全局变量,连接MySQL的用户必须具有SUPER权限。
服务器还为每个客户端连接维护会话变量。连接时使用相应全局变量的当前值对客户端会话变量进行初始化。客户可以通过SET SESSION var_name语句来更改动态会话变量。设置会话变量不需要特殊权限,但客户可以只更改自己的会话变量,而不更改其它客户的会话变量。
任何访问全局变量的客户端都可以看见对全局变量的更改。但是,它只影响 在更改后 连接的 从该全局变量初始化相应会话变量 的客户端。它不会影响已经连接上的客户端的会话变量(甚至是执行SET GLOBAL语句的客户端)。
第一种设置方法,已明确告知了如果MySQL重启了,一切设置将回到MySQL的初始化状态。如果不想前功尽弃,可用第二种方法。
2)第二种设置方法,从MySQL的配置文件中修改系统变量(Windows中MySQL的配置文件是my.ini,Linux中MySQL的配置文件应该是my.cnf),修改后需要重启MySQL才能生效。
类似于下面的开启慢查询设置:
关于变量值的说明:
布尔值类型的:可以用1与0、on与off 表示真与假。
字节类型的:不带字母单位的(比如K = 1024字节、M = 1024 * 1024字节),默认单位就是字节。
对某个变量的变量值有疑问,可以去百度搜,应该会有答案的。