MySQL系統變量是MySQL數據庫的重要組成部分,下面就為您分析MySQL系統變量的具體應用,如果您對MySQL系統變量感興趣的話,不妨一看。
MySQL系統變量
其中系統變量,又分全局(global)和會話(session)兩種.
全局系統變量,主要影響整個mysql實例的全局設置.
大部分變量都是作為mysql的服務器調節參數存在.新增或修改這類變量, 會影響mysql的運行方式.
比如: auto_increment_increment 代表序列的自增值, 默認為1
另外, mysql中,只有一部分變量是支持運行時動態修改的.
變量修改的作用范圍,是那些重新創建連接到mysql服務器的客戶端連接.
如果你的連接是由應用通過連接池來維護的,並且,是長連接的,那麼,此時在服務器運行過程中,動態地修改全局變量對你是沒有什麼影響的.
通過全局變量, 我們可以想到一些應用場景:
1, 在存儲過程, 函數, sql裡,使用一些業務相關的全局變量.
經常編寫業務相關的存儲過程,函數的朋友, 可能會需要針對不同業務,設置能共享訪問的全局變量.
比如, 公司的總人數,很多存儲過程都需要調用這個值,但是因為這個值,不是經常會改變的,不需要每次都count.
所以大多數人會考慮把它cache一把,那麼mysql提供的全局變量,就是一個好的存儲場所.
2, 數據庫配置中心
首先,這不一定是一種好的解決方式, 特別是大型地分布式系統.但是想到了,就跟大家分享一下.
主要就是利用了三層,四層架構的系統, 必不可少的數據庫層來實現的.
大家知道, 應用的配置, 大多數是用配置文件或配置服務器來實現, 前者需要跟著項目打包, 部署.
後者, 只要在應用初始化或運行時,去配置中心取配置就行了.(淘寶這邊兩者都在用)
而數據庫的配置中心, 其實類似配置服務器, 只不過靈活運用了mysql的變量機制.
它能繼承配置服務器的多數優點, 但最大的特色就是在 sql, function , procedure 裡都可以很方便地引用到.(相比用表的方式, 要方便一些)
並且本身就具有緩存, 移植得話, mysql得導出也是很快.
所以小系統, 想快速得搭建一個配置中心,利用mysql感覺還是不錯的.
調用語法:
select * from user_info where id = @@global.admin_id -- 例子,通過全局裡配置的管理員id來取用戶信息
以下是全局變量的一些常用命令,比較簡單:
set global auto_increment_increment=1; -- 設置序列的增長值
show global variables; -- 顯示所有的global變量
show global variables like '%test%' -- 查詢包含test字符串的global變量
會話系統變量, 主要用於在當前客戶端連接的生命周期內.它的變量值是全局變量的一份拷貝.
如果連接斷開, 對當前會話變量所做修改都會被重置.
比如, 服務器會話變量 autocommit 默認為 true , 而你在非常連的客戶端連接裡設置了 false , 那麼在執行完sql後, 連接就會斷開. 此後,如果創建新的連接來執行sql, autocommit又會默認 true.
會話變量的使用場景與全局類似,只是生命周期不同, 因此可以用來統計同一連接內請求sql次數, sql類型等信息.
session變量的一些常用操作:
set session auto_increment_increment=1; -- 設置序列的增長值
show variables; or show session variables; -- 如果不指明, 默認使用session變量
show variables like '%test%' or show session variables lile '%test%' -- 查詢包含test字符串的session變量
分析比較兩種MySQL字符串匹配模式
NULL與MySQL空字符串的區別
深入研究MySQL結果字符串
MySQL截取字符串函數方法
MySQL字符串各列類型的區別