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






















