MySQL系統(tǒng)變量應用探究
MySQL系統(tǒng)變量是MySQL數(shù)據(jù)庫的重要組成部分,下面就為您分析MySQL系統(tǒng)變量的具體應用,如果您對MySQL系統(tǒng)變量感興趣的話,不妨一看。
MySQL系統(tǒng)變量
其中系統(tǒng)變量,又分全局(global)和會話(session)兩種.
全局系統(tǒng)變量,主要影響整個mysql實例的全局設置.
大部分變量都是作為mysql的服務器調(diào)節(jié)參數(shù)存在.新增或修改這類變量, 會影響mysql的運行方式.
比如: auto_increment_increment 代表序列的自增值, 默認為1
另外, mysql中,只有一部分變量是支持運行時動態(tài)修改的.
變量修改的作用范圍,是那些重新創(chuàng)建連接到mysql服務器的客戶端連接.
如果你的連接是由應用通過連接池來維護的,并且,是長連接的,那么,此時在服務器運行過程中,動態(tài)地修改全局變量對你是沒有什么影響的.
通過全局變量, 我們可以想到一些應用場景:
1, 在存儲過程, 函數(shù), sql里,使用一些業(yè)務相關(guān)的全局變量.
經(jīng)常編寫業(yè)務相關(guān)的存儲過程,函數(shù)的朋友, 可能會需要針對不同業(yè)務,設置能共享訪問的全局變量.
比如, 公司的總?cè)藬?shù),很多存儲過程都需要調(diào)用這個值,但是因為這個值,不是經(jīng)常會改變的,不需要每次都count.
所以大多數(shù)人會考慮把它cache一把,那么mysql提供的全局變量,就是一個好的存儲場所.
2, 數(shù)據(jù)庫配置中心
首先,這不一定是一種好的解決方式, 特別是大型地分布式系統(tǒng).但是想到了,就跟大家分享一下.
主要就是利用了三層,四層架構(gòu)的系統(tǒng), 必不可少的數(shù)據(jù)庫層來實現(xiàn)的.
大家知道, 應用的配置, 大多數(shù)是用配置文件或配置服務器來實現(xiàn), 前者需要跟著項目打包, 部署.
后者, 只要在應用初始化或運行時,去配置中心取配置就行了.(淘寶這邊兩者都在用)
而數(shù)據(jù)庫的配置中心, 其實類似配置服務器, 只不過靈活運用了mysql的變量機制.
它能繼承配置服務器的多數(shù)優(yōu)點, 但***的特色就是在 sql, function , procedure 里都可以很方便地引用到.(相比用表的方式, 要方便一些)
并且本身就具有緩存, 移植得話, mysql得導出也是很快.
所以小系統(tǒng), 想快速得搭建一個配置中心,利用mysql感覺還是不錯的.
調(diào)用語法:
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變量
會話系統(tǒng)變量, 主要用于在當前客戶端連接的生命周期內(nèi).它的變量值是全局變量的一份拷貝.
如果連接斷開, 對當前會話變量所做修改都會被重置.
比如, 服務器會話變量 autocommit 默認為 true , 而你在非常連的客戶端連接里設置了 false , 那么在執(zhí)行完sql后, 連接就會斷開. 此后,如果創(chuàng)建新的連接來執(zhí)行sql, autocommit又會默認 true.
會話變量的使用場景與全局類似,只是生命周期不同, 因此可以用來統(tǒng)計同一連接內(nèi)請求sql次數(shù), 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變量
【編輯推薦】