mysql内置的变量,MySQL服务器模式及相关内置变量
本章我們主要包含兩部分的內容:
MySQL服務器模式
MySQL內置變量
1. MySQL服務器模式
不同的MySQL客戶端可以通過不同的模式操作MySQL Server。DBA可以設置一個全局模式,而每個應用程序可以根據需要為相應的會話設置不同的模式。
MySQL操作模式會影響到SQL的語法和相應的SQL語句的校驗。
1.1 設置SQL模式
默認情況下SQL的模式是NO_ENGINE_SUBSTITUTION。如果要在MySQL Server啟動的時候就設置好相應的SQL模式的話,可以使用--sql-mode=命令行選項來進行設置,也可以在MySQL配置文件中通過sql-mode=來進行配置。是由一系列由空格分隔的不同的模式組成。如果要清除SQL模式,則只需要在啟動時傳遞--sql-mode=""或者在配置文件中配置sql-mode=""。
如果需要在運行時更改SQL模式,那么可以設置全局與會話 sql_mode系統變量:
SET GLOBAL sql_mode = 'modes';
SET SESSION sql_mode = 'modes';
對于設置全局變量,需要有SUPER權限,并且會影響到之后連接的所有客戶端。對于設置會話變量,則只會影響到當前客戶端。每個客戶端都可以改變該會話的sql_mode。
可以通過如下命令來獲取當前全局及會話sql_mode:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
1.2 最重要的SQL模式
SQL有很多模式,下面我們介紹幾種常用的重要的SQL模式:
ANSI: 該模式會改變相應的語法和操作行為,以使最接近標準的SQL。它是一種特殊的組合模式(combination modes)。
STRICT_TRANS_TABLES: 假如一個值并不能插入到一個“事務表”中,那么中斷該語句的執行。
TRANDITIONAL: 使MySQL接近于傳統的SQL數據庫系統。簡單的描述即為“在插入錯誤的值到一列時直接返回錯誤,而不是警告”。
2. 獲取服務器元數據
MySQL有很多元數據,這里我們列出幾個常用的:
SELECT VERSION(): 服務器版本信息
SELECT DATABASE(): 當前數據庫名(或者返回為NULL)
SELECT USER(): 當前用戶名
SHOW STATUS: 服務器狀態
SHOW VARIABLES: 獲取當前會話的配置變量
3. 修改MySQL系統變量
下面以設置MySQL 系統變量wait_timeout為例。
3.1 設置全局變量
1) 修改參數文件,然后重啟MySQL
# vi /etc/my.cnf
[mysqld]
wait_timeout=10
# service mysqld restart
此種方法太過生硬,并且要重啟MySQL,一般不推薦。
2) 在命令行通過SET來設置,然后再修改參數文件
如果要修改全局變量,必須要顯示指定GLOBAL或者@@global.,同時必須要有SUPER權限:
mysql> SET GLOBAL wait_timeout=10;
or
mysql> set @@global.wait_timeout=10;
然后通過下面的命令查看設置是否成功:
然后查看設置是否成功:
mysql> SELECT @@global.wait_timeout=10;
or
mysql> SHOW GLOBAL variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 10 |
+---------------+-------+
如果查詢時使用的是SHOW VARIABLES的話,會發現設置并沒有生效,除非重新登錄再查看。這是因為使用SHOW VARIABLES的話就等同于使用SHOW SESSION VARIABLES,查詢的是會話變量,只有使用SHOW GLOBAL VARIABLES查詢的才是全局變量。如果僅僅想修改會話變量的話,可以使用類似SET wait_timeout=10;或SET SESSION wait_timeout=10;`這樣的語法。
當前只修改了正在運行的MySQL實例參數,但下次重啟mysqld又會回到默認值,所以別忘了修改參數文件:
# vi /etc/my.cnf
[mysqld]
wait_timeout=10
3.2 修改會話變量
如果要修改會話變量值,可以指定SESSION或者LOCAL關鍵字,或者通過@@session、@@local、@@限定符, 又或者不加任何關鍵字與限定符。例如:
SET SESSION wait_timeout = 10;
or
SET LOCAL wait_timeout = 10;
or
SET @@session.wait_timeout = 10;
or
SET @@local.wait_timeout = 10;
or
SET @@wait_timetout = 10;
or
SET wait_timeout = 10;
然后查看設置是否成功:
mysql> select @@wait_timeout;
or
mysql> select @@session.wait_timeout;
or
mysql> select @@local.wait_timeout;
or
mysql> show variables like 'wait_timeout';
or
mysql> show local variables like 'wait_timeout';
or
mysql> show session variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 10 |
+---------------+-------+
另外,如果要將一個全局系統變量設置為MySQL編譯時的默認值,或者將一個session系統變量設置為當前的全局值,可以將該變量的值設置為DEFAULT。例如:
SET @@session.max_join_size = DEFAULT;
SET @@session.max_join_size = @@global.max_join_size;
[參看]:
總結
以上是生活随笔為你收集整理的mysql内置的变量,MySQL服务器模式及相关内置变量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android:在酷安发布应用流程记录
- 下一篇: Aptana插件安装到eclipse和m