mysql變量的術(shù)語(yǔ)分類(lèi):
創(chuàng)新互聯(lián)公司擁有十載成都網(wǎng)站建設(shè)工作經(jīng)驗(yàn),為各大企業(yè)提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作服務(wù),對(duì)于網(wǎng)頁(yè)設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、成都App定制開(kāi)發(fā)、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、程序開(kāi)發(fā)、網(wǎng)站優(yōu)化(SEO優(yōu)化)、微網(wǎng)站、域名注冊(cè)等,憑借多年來(lái)在互聯(lián)網(wǎng)的打拼,我們?cè)诨ヂ?lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了很多網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷(xiāo)經(jīng)驗(yàn),集策劃、開(kāi)發(fā)、設(shè)計(jì)、營(yíng)銷(xiāo)、管理等網(wǎng)站化運(yùn)作于一體,具備承接各種規(guī)模類(lèi)型的網(wǎng)站建設(shè)項(xiàng)目的能力。
1.用戶(hù)變量:以"@"開(kāi)始,形式為"@變量名"
用戶(hù)變量跟mysql客戶(hù)端是綁定的,設(shè)置的變量,只對(duì)當(dāng)前用戶(hù)使用的客戶(hù)端生效
2.全局變量:定義時(shí),以如下兩種形式出現(xiàn),set
GLOBAL
變量名
或者
set
@@global.變量名,對(duì)所有客戶(hù)端生效。只有具有super權(quán)限才可以設(shè)置全局變量
3.會(huì)話(huà)變量:只對(duì)連接的客戶(hù)端有效。
4.局部變量:作用范圍在begin到end語(yǔ)句塊之間。在該語(yǔ)句塊里設(shè)置的變量
declare語(yǔ)句專(zhuān)門(mén)用于定義局部變量。set語(yǔ)句是設(shè)置不同類(lèi)型的變量,包括會(huì)話(huà)變量和全局變量
通俗理解術(shù)語(yǔ)之間的區(qū)別:
用戶(hù)定義的變量就叫用戶(hù)變量。這樣理解的話(huà),會(huì)話(huà)變量和全局變量都可以是用戶(hù)定義的變量。只是他們是對(duì)當(dāng)前客戶(hù)端生效還是對(duì)所有客戶(hù)端生效的區(qū)別了。所以,用戶(hù)變量包括了會(huì)話(huà)變量和全局變量
局部變量與用戶(hù)變量的區(qū)分在于兩點(diǎn):
1.
用戶(hù)變量是以"@"開(kāi)頭的。局部變量沒(méi)有這個(gè)符號(hào)。
2.
定義變量不同。用戶(hù)變量使用set語(yǔ)句,局部變量使用declare語(yǔ)句定義
3.
作用范圍。局部變量只在begin-end語(yǔ)句塊之間有效。在begin-end語(yǔ)句塊運(yùn)行完之后,局部變量就消失了。
所以,最后它們之間的層次關(guān)系是:變量包括局部變量和用戶(hù)變量。用戶(hù)變量包括會(huì)話(huà)變量和全局變量。
使用備忘,set
@var
若沒(méi)有指定GLOBAL
或SESSION
,那么默認(rèn)將會(huì)定義用戶(hù)變量
兩種方式定義用戶(hù)變量:
1."=",如
set
@a
=3,@a:=5
2.":="。select常常這樣使用
總結(jié):使用select
和set設(shè)置變量的區(qū)別,set可以使用以上兩種形式設(shè)置變量。而select只能使用":="的形式設(shè)置變量
實(shí)踐積累:用戶(hù)變量在mysql客戶(hù)端退出后,會(huì)自動(dòng)消失。之后我打開(kāi)客戶(hù)端,使用"select
@a;"
顯示變了的值為null。說(shuō)明,未定義的變量初始化是null
實(shí)際中的問(wèn)題
設(shè)置常量對(duì)group_concat()的配置影響:
SET
@@GROUP_CONCAT_MAX_LEN=4
手冊(cè)中提到設(shè)置的語(yǔ)法是這樣的:
SET
[SESSION
|
GLOBAL]
group_concat_max_len
=
val;
以下兩種形式都能達(dá)到達(dá)到同樣的效果,但是有什么區(qū)別?
SET
@@global.GROUP_CONCAT_MAX_LEN=4;
global可以省略,那么就變成了:SET
@@GROUP_CONCAT_MAX_LEN=4;
2011.2.25
之前的理解不怎么準(zhǔn)確。現(xiàn)在對(duì)加深理解后的地方進(jìn)行總結(jié)。
mysql中變量的層次關(guān)系是:大體包括用戶(hù)變量和系統(tǒng)變量。系統(tǒng)變量包括系統(tǒng)會(huì)話(huà)變量和系統(tǒng)全局變量。
相互之間的區(qū)別:
因?yàn)橛脩?hù)變量就是用戶(hù)定義的變量,系統(tǒng)變量就是mysql定義和維護(hù)的變量。所以,用戶(hù)變量與系統(tǒng)變量的區(qū)別在于,是誰(shuí)在管理這些變量。mysql一啟動(dòng)的時(shí)候就會(huì)讀取系統(tǒng)變量(這樣做目的是可以確定mysql的以何種機(jī)制或模式運(yùn)行)。
系統(tǒng)會(huì)話(huà)變量與用戶(hù)變量都是在當(dāng)前客戶(hù)端退出后消失。他們之間的區(qū)別可以這樣理解,雖然常常看到"set
@@varible"的形式去改變系統(tǒng)變量的值,但是并不涉及到定義系統(tǒng)變量。用戶(hù)變量是可以自己定義(初始化)。系統(tǒng)變量按照只是在改變值。
局部變量只在begin-end語(yǔ)句塊中定義并有效。執(zhí)行到該語(yǔ)句塊之后就消失了。定義的方式有明顯的特點(diǎn),使用declare語(yǔ)句。
使用系統(tǒng)變量理論上是可以使用兩種形式:
1.
前面帶有符號(hào)"@@"
2.
符號(hào)省略。比如我會(huì)看的如下形式:CURRENT_USER。但是,約定系統(tǒng)變量要使用"@@變量名"的形式,就是在前面加上符號(hào)"@@"
mySQL裝好后配置環(huán)境變量的步驟如下:
我們需要準(zhǔn)備的材料分別是:電腦、Mysql。
1、首先,查找到mysql安裝目錄,例如:D:\xampp\mysql。
2、右鍵“我的電腦”,點(diǎn)擊“高級(jí)系統(tǒng)設(shè)置”,點(diǎn)擊“環(huán)境變量”按鈕。
3、點(diǎn)擊“新建”按鈕,變量名輸入:MYSQL_HOME,變量值輸入mysql的路徑,例如:D:\xampp\mysql,點(diǎn)擊“確定”。
4、之后,打開(kāi)cmd,即可直接輸入數(shù)據(jù)庫(kù)連接命令來(lái)使用,例如:mysql -u root -p。
1、對(duì)于命令控來(lái)說(shuō),在cmd命令下行下操作很方便,但有時(shí)需要直接在命令行床空?qǐng)?zhí)行mysql這樣的命令,會(huì)出現(xiàn)”mysql不是內(nèi)部或外部命令“這樣的錯(cuò)誤提示,原因是mysql其實(shí)是一個(gè)exe文件,存放于myql安裝路徑/bin下,因此需要將mysql的安裝路徑配置到path環(huán)境變量中,如此以后就不用每次都cd到mysql路徑下了;
2、設(shè)置完成后我們?cè)僭囋嚳?cmd--mysql
已經(jīng)連接上mysql了,接下來(lái)我們可以使用dml、sql語(yǔ)言來(lái)創(chuàng)建我們自己的數(shù)據(jù)庫(kù)了;
3、首先,要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫(kù)名字為test_user;
創(chuàng)建成功!
4、創(chuàng)建一個(gè)張數(shù)據(jù)表,使用腳本即可。
注意,創(chuàng)建table之前一定要use databasename;
你能用這個(gè)命令得到mysqld服務(wù)器缺省緩沖區(qū)大小:
shellmysqld--help
這個(gè)命令生成一張所有mysqld選項(xiàng)和可配置變量的表。輸出包括缺省值并且看上去象這樣一些東西:
如果有一個(gè)mysqld服務(wù)器正在運(yùn)行,通過(guò)執(zhí)行這個(gè)命令,你可以看到它實(shí)際上使用的變量的值:
shellmysqladminvariables
每個(gè)選項(xiàng)在下面描述。對(duì)于緩沖區(qū)大小、長(zhǎng)度和棧大小的值以字節(jié)給出,你能用于個(gè)后綴“K”或“M”指出以K字節(jié)或兆字節(jié)顯示值。例如,16M指出16兆字節(jié)。后綴字母的大小寫(xiě)沒(méi)有關(guān)系;16M和16m是相同的。
你也可以用命令SHOWSTATUS自一個(gè)運(yùn)行的服務(wù)器看見(jiàn)一些統(tǒng)計(jì)。見(jiàn)7.21SHOW語(yǔ)法(得到表、列的信息)。
back_log
要求MySQL能有的連接數(shù)量。當(dāng)主要MySQL線(xiàn)程在一個(gè)很短時(shí)間內(nèi)得到非常多的連接請(qǐng)求,這就起作用,然后主線(xiàn)程花些時(shí)間(盡管很短)檢查連接并且啟動(dòng)一個(gè)新線(xiàn)程。back_log值指出在MySQL暫時(shí)停止回答新請(qǐng)求之前的短時(shí)間內(nèi)多少個(gè)請(qǐng)求可以被存在堆棧中。只有如果期望在一個(gè)短時(shí)間內(nèi)有很多連接,你需要增加它,換句話(huà)說(shuō),這值對(duì)到來(lái)的TCP/IP連接的偵聽(tīng)隊(duì)列的大小。你的操作系統(tǒng)在這個(gè)隊(duì)列大小上有它自己的限制。Unixlisten(2)系統(tǒng)調(diào)用的手冊(cè)頁(yè)應(yīng)該有更多的細(xì)節(jié)。檢查你的OS文檔找出這個(gè)變量的最大值。試圖設(shè)定back_log高于你的操作系統(tǒng)的`限制將是無(wú)效的。
connect_timeout
mysqld服務(wù)器在用Badhandshake(糟糕的握手)應(yīng)答前正在等待一個(gè)連接報(bào)文的秒數(shù)。
delayed__timeout
一個(gè)InsertDELAYED線(xiàn)程應(yīng)該在終止之前等待Insert語(yǔ)句的時(shí)間。
delayed__limit
在插入delayed__limit行后,InsertDELAYED處理器將檢查是否有任何Select語(yǔ)句未執(zhí)行。如果這樣,在繼續(xù)前執(zhí)行允許這些語(yǔ)句。
delayed_queue_size
應(yīng)該為處理InsertDELAYED分配多大一個(gè)隊(duì)列(以行數(shù))。如果排隊(duì)滿(mǎn)了,任何進(jìn)行InsertDELAYED的客戶(hù)將等待直到隊(duì)列又有空間了。
flush_time
如果這被設(shè)置為非零值,那么每flush_time秒所有表將被關(guān)閉(以釋放資源和sync到磁盤(pán))。
interactive_timeout
服務(wù)器在關(guān)上它前在一個(gè)交互連接上等待行動(dòng)的秒數(shù)。一個(gè)交互的客戶(hù)被定義為對(duì)mysql_real_connect()使用CLIENT_INTERACTIVE選項(xiàng)的客戶(hù)。也可見(jiàn)wait_timeout。
join_buffer_size
用于全部聯(lián)結(jié)(join)的緩沖區(qū)大小(不是用索引的聯(lián)結(jié))。緩沖區(qū)對(duì)2個(gè)表間的每個(gè)全部聯(lián)結(jié)分配一次緩沖區(qū),當(dāng)增加索引不可能時(shí),增加該值可得到一個(gè)更快的全部聯(lián)結(jié)。(通常得到快速聯(lián)結(jié)的最佳方法是增加索引。)
key_buffer_size
索引塊是緩沖的并且被所有的線(xiàn)程共享。key_buffer_size是用于索引塊的緩沖區(qū)大小,增加它可得到更好處理的索引(對(duì)所有讀和多重寫(xiě)),到你能負(fù)擔(dān)得起那樣多。如果你使它太大,系統(tǒng)將開(kāi)始換頁(yè)并且真的變慢了。記住既然MySQL不緩存讀取的數(shù)據(jù),你將必須為OS文件系統(tǒng)緩存留下一些空間。為了在寫(xiě)入多個(gè)行時(shí)得到更多的速度,使用LOCKTABLES。見(jiàn)7.24LOCKTABLES/UNLOCKTABLES語(yǔ)法。
long_query_time
如果一個(gè)查詢(xún)所用時(shí)間超過(guò)它(以秒計(jì)),Slow_queries記數(shù)器將被增加。
max_allowed_packet
一個(gè)包的最大尺寸。消息緩沖區(qū)被初始化為net_buffer_length字節(jié),但是可在需要時(shí)增加到max_allowed_packet個(gè)字節(jié)。缺省地,該值太小必能捕捉大的(可能錯(cuò)誤)包。如果你正在使用大的BLOB列,你必須增加該值。它應(yīng)該象你想要使用的最大BLOB的那么大。
max_connections
允許的同時(shí)客戶(hù)的數(shù)量。增加該值增加mysqld要求的文件描述符的數(shù)量。見(jiàn)下面對(duì)文件描述符限制的注釋。見(jiàn)18.2.4Toomanyconnections錯(cuò)誤。
max_connect_errors
如果有多于該數(shù)量的從一臺(tái)主機(jī)中斷的連接,這臺(tái)主機(jī)阻止進(jìn)一步的連接。你可用FLUSHHOSTS命令疏通一臺(tái)主機(jī)。
max_delayed_threads
不要啟動(dòng)多于的這個(gè)數(shù)字的線(xiàn)程來(lái)處理InsertDELAYED語(yǔ)句。如果你試圖在所有InsertDELAYED線(xiàn)程在用后向一張新表插入數(shù)據(jù),行將入,就像DELAYED屬性沒(méi)被指定那樣。
max_join_size
可能將要讀入多于max_join_size個(gè)記錄的聯(lián)結(jié)將返回一個(gè)錯(cuò)誤。如果你的用戶(hù)想要執(zhí)行沒(méi)有一個(gè)Where子句、花很長(zhǎng)時(shí)間并且返回百萬(wàn)行的聯(lián)結(jié),設(shè)置它。
max_sort_length
在排序BLOB或TEXT值時(shí)使用的字節(jié)數(shù)(每個(gè)值僅頭max_sort_length個(gè)字節(jié)被使用;其余的被忽略)。
max_tmp_tables
(該選擇目前還不做任何事情)。一個(gè)客戶(hù)能同時(shí)保持打開(kāi)的臨時(shí)表的最大數(shù)量。
net_buffer_length
通信緩沖區(qū)在查詢(xún)之間被重置到該大小。通常這不應(yīng)該被改變,但是如果你有很少的內(nèi)存,你能將它設(shè)置為查詢(xún)期望的大小。(即,客戶(hù)發(fā)出的SQL語(yǔ)句期望的長(zhǎng)度。如果語(yǔ)句超過(guò)這個(gè)長(zhǎng)度,緩沖區(qū)自動(dòng)地被擴(kuò)大,直到max_allowed_packet個(gè)字節(jié)。)
record_buffer
每個(gè)進(jìn)行一個(gè)順序掃描的線(xiàn)程為其掃描的每張表分配這個(gè)大小的一個(gè)緩沖區(qū)。如果你做很多順序掃描,你可能想要增加該值。
sort_buffer
每個(gè)需要進(jìn)行排序的線(xiàn)程分配該大小的一個(gè)緩沖區(qū)。增加這值加速ORDERBY或GROUPBY操作。見(jiàn)18.5MySQL在哪兒存儲(chǔ)臨時(shí)文件。
table_cache
為所有線(xiàn)程打開(kāi)表的數(shù)量。增加該值能增加mysqld要求的文件描述符的數(shù)量。MySQL對(duì)每個(gè)唯一打開(kāi)的表需要2個(gè)文件描述符,見(jiàn)下面對(duì)文件描述符限制的注釋。對(duì)于表緩存如何工作的信息,見(jiàn)10.2.4MySQL怎樣打開(kāi)和關(guān)閉表。
tmp_table_size
如果一張臨時(shí)表超出該大小,MySQL產(chǎn)生一個(gè)Thetabletbl_nameisfull形式的錯(cuò)誤,如果你做很多高級(jí)GROUPBY查詢(xún),增加tmp_table_size值。
thread_stack
每個(gè)線(xiàn)程的棧大小。由crash-me測(cè)試檢測(cè)到的許多限制依賴(lài)于該值。缺省隊(duì)一般的操作是足夠大了。見(jiàn)10.8使用你自己的基準(zhǔn)。
wait_timeout
服務(wù)器在關(guān)閉它之前在一個(gè)連接上等待行動(dòng)的秒數(shù)。也可見(jiàn)interactive_timeout。
MySQL使用是很具伸縮性的算法,因此你通常能用很少的內(nèi)存運(yùn)行或給MySQL更多的被存以得到更好的性能。
如果你有很多內(nèi)存和很多表并且有一個(gè)中等數(shù)量的客戶(hù),想要最大的性能,你應(yīng)該一些象這樣的東西:
shellsafe_mysqld-Okey_buffer=16M-Otable_cache=128
?????-Osort_buffer=4M-Orecord_buffer=1M
如果你有較少的內(nèi)存和大量的連接,使用這樣一些東西:
shellsafe_mysqld-Okey_buffer=512k-Osort_buffer=100k
?????-Orecord_buffer=100k
或甚至:
shellsafe_mysqld-Okey_buffer=512k-Osort_buffer=16k
?????-Otable_cache=32-Orecord_buffer=8k-Onet_buffer=1K
如果有很多連接,“交換問(wèn)題”可能發(fā)生,除非mysqld已經(jīng)被配置每個(gè)連接使用很少的內(nèi)存。當(dāng)然如果你對(duì)所有連接有足夠的內(nèi)存,mysqld執(zhí)行得更好。
注意,如果你改變mysqld的一個(gè)選項(xiàng),它實(shí)際上只對(duì)服務(wù)器的那個(gè)例子保持。
為了明白一個(gè)參數(shù)變化的效果,這樣做:
shellmysqld-Okey_buffer=32m--help
保證--help選項(xiàng)是最后一個(gè);否則,命令行上在它之后列出的任何選項(xiàng)的效果將不在反映在輸出中。
打開(kāi)我的電腦,屬性,高級(jí),環(huán)境變量,在系統(tǒng)變量里選擇PATH,在其后添加路徑
一、局部變量
局部變量一般用在sql語(yǔ)句塊中,比如存儲(chǔ)過(guò)程的begin/end。其作用域僅限于該語(yǔ)句塊,在該語(yǔ)句塊執(zhí)行完畢后,局部變量就消失了。
局部變量一般用declare來(lái)聲明,可以使用default來(lái)說(shuō)明默認(rèn)值。
二、用戶(hù)變量
用戶(hù)變量的作用域要比局部變量要廣。用戶(hù)變量可以作用于當(dāng)前整個(gè)連接,但是當(dāng)當(dāng)前連接斷開(kāi)后,其所定義的用戶(hù)變量都會(huì)消失。
用戶(hù)變量使用如下(這里我們無(wú)須使用declare關(guān)鍵字進(jìn)行定義,可以直接這樣使用):
select @變量名
對(duì)用戶(hù)變量賦值有兩種方式,一種是直接用"="號(hào),另一種是用":="號(hào)。其區(qū)別在于使用set命令對(duì)用戶(hù)變量進(jìn)行賦值時(shí),兩種方式都可以使用;當(dāng)使用select語(yǔ)句對(duì)用戶(hù)變量進(jìn)行賦值時(shí),只能使用":="方式,因?yàn)樵趕elect語(yǔ)句中,"="號(hào)被看作是比較操作符。
分享文章:mysql怎么設(shè)置變量 MySQL設(shè)置變量
分享路徑:http://m.newbst.com/article40/hjheeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站維護(hù)、微信小程序、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容