MySQL的變數分類總結

来源:https://www.cnblogs.com/kerrycode/archive/2018/05/10/9021378.html
-Advertisement-
Play Games

在MySQL中,my.cnf是參數文件(Option Files),類似於ORACLE資料庫中的spfile、pfile參數文件,照理說,參數文件my.cnf中的都是系統參數(這種稱呼比較符合思維習慣),但是官方又稱呼其為系統變數(system variables),那麼到底這個叫系統參數或系統變數... ...


 

在MySQL中,my.cnf是參數文件(Option Files),類似於ORACLE資料庫中的spfile、pfile參數文件,照理說,參數文件my.cnf中的都是系統參數(這種稱呼比較符合思維習慣),但是官方又稱呼其為系統變數(system variables),那麼到底這個叫系統參數或系統變數(system variables)呢? 這個曾經是一個讓我很糾結的問題,因為MySQL中有各種類型的變數,有時候語言就是這麼博大精深;相信很多人也對這個問題或多或少有點困惑。其實拋開這些名詞,它們就是同一個事情(東西),不管你叫它系統變數(system variables)或系統參數都可,無需那麼糾結。 就好比王三,有人叫他王三;也有人也叫他王麻子綽號一樣。

 

另外,MySQL中有很多變數類型,確實有時候讓人有點混淆不清,本文打算總結一下MySQL資料庫的各種變數類型,理清各種變數類型概念。能夠從全局有個清晰思路。MySQL變數類型具體參考下圖:

 

clip_image001

 

 

 

 

Server System Variables(系統變數)

 

 

MySQL系統變數(system variables)是指MySQL實例的各種系統變數,實際上是一些系統參數,用於初始化或設定資料庫對系統資源的占用,文件存放位置等等,這些變數包含MySQL編譯時的參數預設值,或者my.cnf配置文件里配置的參數值。預設情況下系統變數都是小寫字母。官方文檔介紹如下:

 

The MySQL server maintains many system variables that indicate how it is configured. Each system variable has a default value. System variables can be set at server startup using options on the command line or in an option file. Most of them can be changed dynamically at runtime using the SET statement, which enables you to modify operation of the server without having to stop and restart it. You can also use system variable values in expressions.

 

 

系統變數(system variables)按作用域範圍可以分為會話級別系統變數和全局級別系統變數。如果要確認系統變數是全局級別還是會話級別,可以參考官方文檔,如果Scope其值為GLOBAL或SESSION,表示變數既是全局級別系統變數,又是會話級別系統變數。如果其Scope其值為GLOBAL,表示系統變數為全局級別系統變數。

 

--查看系統變數的全局值

 

select * from information_schema.global_variables;

select * from information_schema.global_variables

  where variable_name='xxxx';

select * from performance_schema.global_variables;

 

 

--查看系統變數的當前會話值

 

select * from information_schema.session_variables;

    select * from information_schema.session_variables

  where variable_name='xxxx';

select * from performance_schema.session_variables;

 

 

 

 

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

 

mysql> show variables like '%connect_timeout%'; 

mysql> show local variables like '%connect_timeout%';

mysql> show session variables like '%connect_timeout%';

mysql> show global variables like '%connect_timeout%';

 

註意:對於SHOW VARIABLES,如果不指定GLOBAL、SESSION或者LOCAL,MySQL返回SESSION值,如果要區分系統變數是全局還是會話級別。不能使用下麵方式,如果某一個系統變數是全局級別的,那麼在當前會話的值也是全局級別的值。例如系統變數AUTOMATIC_SP_PRIVILEGES,它是一個全局級別系統變數,但是 show session variables like '%automatic_sp_privileges%'一樣能查到其值。所以這種方式無法區別系統變數是會話級別還是全局級別。

 

mysql> show session variables like '%automatic_sp_privileges%';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| automatic_sp_privileges | ON    |
+-------------------------+-------+
1 row in set (0.00 sec)
 
mysql> select * from information_schema.global_variables
    -> where variable_name='automatic_sp_privileges';
+-------------------------+----------------+
| VARIABLE_NAME           | VARIABLE_VALUE |
+-------------------------+----------------+
| AUTOMATIC_SP_PRIVILEGES | ON             |
+-------------------------+----------------+
1 row in set, 1 warning (0.00 sec)
 
mysql> 

 

 

如果要區分系統變數是全局還是會話級別,可以用下麵方式:

 

方法1: 查官方文檔中系統變數的Scope屬性。

方法2: 使用SET VARIABLE_NAME=xxx; 如果報ERROR 1229 (HY000),則表示該變數為全局,如果不報錯,那麼證明該系統變數為全局和會話兩個級別。

   

 

mysql> SET AUTOMATIC_SP_PRIVILEGES=OFF;
 
ERROR 1229 (HY000): Variable 'automatic_sp_privileges' is a GLOBAL variable and should be set with SET GLOBAL

 

 

 

可以使用SET命令修改系統變數的值,如下所示:

 

修改全局級別系統變數:

 

SET GLOBAL max_connections=300;
 
SET @@global.max_connections=300;

 

註意:更改全局變數的值,需要擁有SUPER許可權

 

修改會話級別系統變數:

 

   SET @@session.max_join_size=DEFAULT;

  SET max_join_size=DEFAULT;  --預設為會話變數。如果在變數名前沒有級別限定符,表示修改會話級變數。

   SET SESSION max_join_size=DEFAULT;

 

如果修改系統全局變數沒有指定GLOBAL或@@global的話,就會報Variable 'xxx' is a GLOBAL variable and should be set with SET GLOBAL這類錯誤。

 

mysql> set max_connections=300;
ERROR 1229 (HY000): Variable 'max_connections' is a GLOBAL variable and should be set with SET GLOBAL
mysql> set global max_connections=300;
Query OK, 0 rows affected (0.00 sec)
 
mysql> 

 

 

 

系統變數(system variables)按是否可以動態修改,可以分為系統動態變數(Dynamic System Variables)和系統靜態變數。怎麼區分系統變數是動態和靜態的呢? 這個只能查看官方文檔,系統變數的"Dynamic"屬性為Yes,則表示可以動態修改。Dynamic Variable具體可以參考https://dev.mysql.com/doc/refman/5.7/en/dynamic-system-variables.html

 

另外,有些系統變數是只讀的,不能修改的。如下所示:

 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 查看埠對應的程式: 根據進程號 ,查看程式的運行信息, 比如可執行文件的位置。 ...
  • 內核級別: (POST)BIOS加電自檢-->(Boot Sequence)從BIOS中讀取啟動順序-->讀取MBR中的bootloader-->載入內核-->讀取偽根-->讀取根文件中的init(/sbin/init) 用戶級別:設置預設運行級別-->運行初始化腳本,完成系統初始化-->關閉對應級 ...
  • Linux發行版本:基於linux內核提供桌面環境及辦公套件的操作系統 (Linux內核只有一個) 1. 啟動終端的快捷鍵: ctr + alt + t 2. 終端字體放大: ctr+shift+'+' 3. 終端字體縮小: ctr+'-' 4. ls : 查看當前目錄的文件信息 4.1 ls 路徑 ...
  • usr/bin/ld: cannot find -lxxx問題總結 linux下編譯應用程式常常會出現如下錯誤: /usr/bin/ld: cannot find -lxxx 意思是編譯過程找不到對應庫文件。其中,-lxxx表示鏈接庫文件 libxxx.so。 註:有時候,由於庫文件是編譯過程臨時生 ...
  • 1、簡述osi七層模型和TCP/IP四層模型 OSI七層模型 TCP/IP四層模型 2、簡述iproute家族命令 ip命令: ip [OPTIONS] OBJECT {COMMAND|help} ip link:network device configuration. ip link set D ...
  • 本文主要是總結一些常用的在實際運用中常用的一些mysql時間日期以及轉換的函數 1.now() :返回當前日期和時間 2.curdate() :返回當前日期 3. dayofweek(data) : 返回日期 data 是星期幾 (1 = 星期日,2 =星期一...7=星期六,ODBC標準) 4.w ...
  • Redis是一個開源的使用ANSI C語言編寫、支持網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。(百度百科 0.0) 下載:http://www.redis.cn/ 1、將下載的redis-4.0.9.tar.gz放置/usr/local目錄下,並解壓: t ...
  • 博主在工作中,常常需要使用sql語句來進行查詢,總結髮現,靈活使用這幾個要點,就可以應付大部分簡單情況。 一.連接:根據兩個或多個表中的列之間的關係,從這些表中查詢數據。 JOIN或INNER JOIN: 返回左表和右表中相互匹配的行 LEFT JOIN: 返回左表和右表中相互匹配的行,及左表中不相 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...