MySQL系统变量(system variables)实际上是一些系统参数,用于初始化或设定数据库对系统资源的占用,文件存放位置等等。这些个系统变量可以分为全局以及会话级别层面来修改,有些也可以进行动态修改。本文主要介绍了系统变量的一些概念以及如何设置查看这些系统变量。

1、什么是系统变量
   系统变量实际上用于控制数据库的一些行为和方式的参数。比如我们启动数据库的时候设定多大的内存,使用什么样的隔离级别,日志文件的大小,存放位置等等一系列的东东。当然我们数据库系统启动后,有些系统变量(参数)也可以通过动态修改来及时调整数据库。这个系统变量在Oracle里边是通过pfile或者spfile来控制,称之为参数,是一个意思。
   系统变量取值:都有默认值,可以在启动时及启动后修改。
   设置范围:全局与回话级别,全局级别需要super权限,会话级别只影响自身会话。
   设置方法:启动前可以通过配置文件以及启动选项来修改,启动后通过SET子句来设置。
   生效周期:全局变量全局可见,但只影响在更改后连接的从该全局变量初始化相应会话变量的客户端。当前会话及已登录的会话不受影响。

对于有关涉及到size的设置值,可以使用后缀K、M或G分别表示千字节、兆字节或gigabytes,不区分大小写。
  
2、set设置系统变量的用法

--当前的版本
mysql> show variables like 'version%';
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| version                 | 5.5.37                       |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | Linux                        |
+-------------------------+------------------------------+
--获取有关set的帮助
mysql> help set
Name: 'SET'
Description:
Syntax:
SET variable_assignment [, variable_assignment] ...
variable_assignment:
user_var_name = expr
| [GLOBAL | SESSION] system_var_name = expr
| [@@global. | @@session. | @@]system_var_name = expr
--查看全部系统变量
root@localhost[tempdb]> show variables;  --该命令会输出当前系统全部系统变量
--查看sort_buffer
mysql> show variables like 'sort_buffer%';
+------------------+---------+
| Variable_name    | Value   |
+------------------+---------+
| sort_buffer_size | 2097152 |
+------------------+---------+
--在省略global与session关键字的情形下为session级别
mysql> set sort_buffer_size=1024*1024*4;   --设置为4M
mysql> show variables like 'sort_buffer%';
+------------------+---------+
| Variable_name    | Value   |
+------------------+---------+
| sort_buffer_size | 4194304 |
+------------------+---------+
--恢复到缺省值
mysql> set sort_buffer_size=default;
mysql> show variables like 'sort_buffer%';
+------------------+---------+
| Variable_name    | Value   |
+------------------+---------+
| sort_buffer_size | 2097152 |
+------------------+---------+

3、全局与会话级别设置示例

--如何设置隔离级别
mysql> help isolation
Name: 'ISOLATION'
Description:
Syntax:
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL
{
REPEATABLE READ
| READ COMMITTED
| READ UNCOMMITTED
| SERIALIZABLE
}
--下面我们通过演示隔离级别来设置全局与session级别变量
--查看当前session级别的隔离方式
root@localhost[(none)]> show variables like '%isolation%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| tx_isolation  | REPEATABLE-READ |
+---------------+-----------------+
--修改当前session级别的隔离方式为READ-COMMITTED
root@localhost[(none)]> set session transaction isolation level read committed;
root@localhost[(none)]> show variables like '%isolation%';
+---------------+----------------+
| Variable_name | Value          |
+---------------+----------------+
| tx_isolation  | READ-COMMITTED |
+---------------+----------------+
--另外的一个session , 登录用户为fred
--当前sessioin级别继承全局隔离级别为REPEATABLE-READ
fred@localhost[(none)]> show variables like '%isolation%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| tx_isolation  | REPEATABLE-READ |
+---------------+-----------------+
--在root会话中设置全局隔离级别为serializable
root@localhost[(none)]> set global transaction isolation level serializable;
--注意,在root会话中 session级别还是为READ-COMMITTED
root@localhost[(none)]> show variables like '%isolation%';
+---------------+----------------+
| Variable_name | Value          |
+---------------+----------------+
| tx_isolation  | READ-COMMITTED |
+---------------+----------------+
--在root会话中我可以看到全局的值已经变为SERIALIZABLE
root@localhost[(none)]> show global variables like '%isolation%';
+---------------+--------------+
| Variable_name | Value        |
+---------------+--------------+
| tx_isolation  | SERIALIZABLE |
+---------------+--------------+
--在fred中全局的也变成了SERIALIZABLE
fred@localhost[(none)]> show global variables like '%isolation%';
+---------------+--------------+
| Variable_name | Value        |
+---------------+--------------+
| tx_isolation  | SERIALIZABLE |
+---------------+--------------+
--从上面的演示来说,无论global级别如何设置,不会影响到当前session级别的设置
--下面我们使用一个新用户登录来看看全局设置是否影响新会话
robin@SZDB:~> mysql -urobin
--如下查询新会话的隔离级别等于全局的隔离级别
robin@localhost[(none)]> show variables like '%isolation%';
+---------------+--------------+
| Variable_name | Value        |
+---------------+--------------+
| tx_isolation  | SERIALIZABLE |
+---------------+--------------+

4、如何获取变量值

除了通过前面演示的使用show global|session variables like 'vari_name'方式之外,我们可以通过查询
information_schema数据中特定的表来获得这些变量的值。
通过查询数据information_schema的表global_variables
root@localhost[information_schema]> select variable_value from global_variables where
-> variable_name='tx_isolation';
+----------------+
| variable_value |
+----------------+
| SERIALIZABLE   |
+----------------+
--Author: Leshami
--Blog  : http://blog.csdn.net/leshami
root@localhost[information_schema]> select @@global.tx_isolation;
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| SERIALIZABLE          |
+-----------------------+
root@localhost[information_schema]> select @@session.tx_isolation;
+------------------------+
| @@session.tx_isolation |
+------------------------+
| READ-COMMITTED         |
+------------------------+
--下面查询session_variables结果与查询global_variables获得的值相同,究其原因还在进一步研究中。
root@localhost[information_schema]> select * from session_variables where variable_name='tx_isolation';
+---------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+---------------+----------------+
| TX_ISOLATION  | SERIALIZABLE   |    --经过重新设置一次session级别的tx_isolation后查询正常。补充@20140928
+---------------+----------------+

5、总结
a、设置方法
    要想设置一个GLOBAL变量的值,使用下面的语法:
       mysql> SET GLOBAL sort_buffer_size=value;
       mysql> SET @@global.sort_buffer_size=value;
  
    要想设置一个SESSION变量的值,使用下面的语法:
       mysql> SET SESSION sort_buffer_size=value;
       mysql> SET @@session.sort_buffer_size=value;
       mysql> SET sort_buffer_size=value;
       LOCAL是SESSION的同义词。
    如果设置变量时不指定GLOBAL、SESSION或者LOCAL,默认使用SESSION。

b、检索设置  
    要想检索一个GLOBAL变量的值,使用下面的语法:
       mysql> SELECT @@global.sort_buffer_size;
       mysql> SHOW GLOBAL VARIABLES like 'sort_buffer_size';
  
    要想检索一个SESSION变量的值,使用下面的语法:
       mysql> SELECT @@sort_buffer_size;
       mysql> SELECT @@session.sort_buffer_size;
       mysql> SHOW SESSION VARIABLES like 'sort_buffer_size';
    这里,LOCAL也是SESSION的同义词。

c、其他注意事项  
    当你用SELECT @@var_name搜索一个变量时(也就是说,不指定global.、session.或者local.),
    MySQL返回SESSION值(如果存在),否则返回GLOBAL值。
    对于SHOW VARIABLES,如果不指定GLOBAL、SESSION或者LOCAL,MySQL返回SESSION值。

MySQL 系统变量(system variables)相关推荐

  1. system var mysql_MySQL 系统变量(system variables)

    MySQL系统变量(system variables)实际上是一些系统参数,用于初始化或设定数据库对系统资源的占用,文件存放位置等等.这些个系统变量可以分为全局以及会话级别层面来修改,有些也可以进行动 ...

  2. 利用Vector CANOE/CANalyzer的系统变量System Variables观察CAN信号之间的关系

    利用CANOE/CANalyzer添加"系统变量(System Variables)",进行CAN信号之间的"加减乘除"运算,协助分析CAN信号之间的差异,给工 ...

  3. mysql系统变量_MySQL 系统变量(system variables)

    3.全局与会话级别设置示例 --如何设置隔离级别 mysql> help isolation Name: 'ISOLATION' Description: Syntax: SET [GLOBAL ...

  4. 9、MySQL系统变量(查看和修改)

    在 MySQL 数据库,变量分为系统变量和用户自定义变量.系统变量以 @@ 开头,用户自定义变量以 @ 开头. 服务器维护着两种系统变量,即全局变量(GLOBAL VARIABLES)和会话变量(SE ...

  5. MySQL系统变量和自定义变量

    1 系统变量 1.1 查看系统变量 可以使用以下命令查看 MySQL 中所有的全局变量信息. SHOW GLOBAL VARIABLES; MySQL 中的系统变量以两个"@"开头 ...

  6. mysql系统变量_MySQL系统变量

    @v是用户自定义的变量set @a="1" @@是mysql系统变量select @@version_comment, @@global.xxxx, @@session.xxxx, ...

  7. MySQL系统变量auto_increment_increment与auto_increment_offset学习总结

    在MySQL中,系统变量auto_increment_increment与auto_increment_offset是与自增列相关的两个参数变量.在官方文档中,将其划分为Replication Mas ...

  8. mysql系统变量详解

    mysqld服务器维护两种变量.全局变量影响服务器的全局操作.会话变量影响具体客户端连接相关操作. 服务器启动时,将所有全局变量初始化为默认值.可以在选项文件或命令行中指定的选项来更改这些默认值.服务 ...

  9. MySql系统变量explicit_defaults_for_timestamp

    之前没太注意timestamp这个数据类型,有个坑就是在默认值上,MySql-5.6.6弃用了explicit_defaults_for_timestamp这个系统变量.我的版本却高于5.6.6,所以 ...

最新文章

  1. css float left right 中间空间城数据无法显示
  2. jQuery.fn是什么意思?
  3. 【转】Android兼容性测试CTS Verifier-环境搭建、测试执行、结果分析
  4. 如何在已安装TMG2010服务器上安装Symantec Backup Exec 2010 Remote Agent
  5. NLTK使用英文词性还原
  6. 【渝粤题库】广东开放大学 文化产业概论 形成性考核 (2)
  7. atitit attilax的新目标 未来学家.docx
  8. 工程图字体宋体仿宋_Windows自带的宋体、黑体、楷体、仿宋体等能免费商用吗?...
  9. visio中控制箭头
  10. 按键精灵实现远程获取消息内容自动发送到群里(支持多个qq)
  11. Prisma(一)——基础
  12. 会议选座位php,会议室座次(会议座位怎么排位)
  13. Python code on Sliced Inverse Regression ( SIR ) and Sliced Average Variance Estimates ( SAVE )
  14. mysql 核对_mysql数据库核对
  15. vscode输出不滚动_解决 使用VSCode环境进行开发,突然出现卡顿、打字显示缓慢,滚动、选择迟缓等问题...
  16. 一定要做自己最内行的东西,一定要在自己本身的职位上来提升自己
  17. 行列式因子、不变因子、初等因子、smith标准型、Jordan标准型、最小多项式的matlab实现
  18. games101学习笔记_Geometry1(几何)
  19. pyecharts geo绘制地理信息地图
  20. 【BZOJ2095】 Bridge

热门文章

  1. 精益六西格玛,研发团队提质增效的管理神器
  2. 计算机技术结题报告,计算机图形学课程结题-报告选题:
  3. 教你如何搭建店铺—收支管理系统,demo可分享
  4. 记账一段时间后,如何根据条件查看收支明细
  5. CSS文字左右两边有线
  6. Latex 常用数学符号
  7. 生物统计师与临床医生协同研究使用的低代码洞察平台丨数据科学 x 临床医学
  8. Casio普通计算器编程
  9. Android平台Gallery2应用分析(四)---AlbumSetPage
  10. 针对此次iTunes12.1升级导致第三方用不了的解决方案