本篇文章給大家分享的是有關(guān)如何鎖定MySQL數(shù)據(jù)庫(kù)表,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
在儀隴等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),成都營(yíng)銷網(wǎng)站建設(shè),外貿(mào)網(wǎng)站建設(shè),儀隴網(wǎng)站建設(shè)費(fèi)用合理。如何鎖定MySQL數(shù)據(jù)庫(kù)表
鎖定表的方法
防止客戶機(jī)的請(qǐng)求互相干擾或者服務(wù)器與維護(hù)程序相互干擾的方法主要有多種。如果你關(guān)閉數(shù)據(jù)庫(kù),就可以保證服務(wù)器和myisamchk和isamchk之間沒(méi)有交互作用。但是停止服務(wù)器的運(yùn)行并不是一個(gè)好注意,因?yàn)檫@樣做會(huì)使得沒(méi)有故障的數(shù)據(jù)庫(kù)和表也不可用。本節(jié)主要討論的過(guò)程,是避免服務(wù)器和myisamchk或isamchk之間的交互作用。實(shí)現(xiàn)這種功能的方法是對(duì)表進(jìn)行鎖定。
服務(wù)器由兩種表的鎖定方法:
1.內(nèi)部鎖定
內(nèi)部鎖定可以避免客戶機(jī)的請(qǐng)求相互干擾——例如,避免客戶機(jī)的SELECT查詢被另一個(gè)客戶機(jī)的UPDATE查詢所干擾。也可以利用內(nèi)部鎖定機(jī)制防止服務(wù)器在利用myisamchk或isamchk檢查或修復(fù)表時(shí)對(duì)表的訪問(wèn)。
語(yǔ)法:
鎖定表:LOCKTABLEStbl_name{READ|WRITE},[tbl_name{READ|WRITE},…]
解鎖表:UNLOCKTABLES
LOCKTABLES為當(dāng)前線程鎖定表。UNLOCKTABLES釋放被當(dāng)前線程持有的任何鎖。當(dāng)線程發(fā)出另外一個(gè)LOCKTABLES時(shí),或當(dāng)服務(wù)器的連接被關(guān)閉時(shí),當(dāng)前線程鎖定的所有表自動(dòng)被解鎖。
如果一個(gè)線程獲得在一個(gè)表上的一個(gè)READ鎖,該線程(和所有其他線程)只能從表中讀。如果一個(gè)線程獲得一個(gè)表上的一個(gè)WRITE鎖,那么只有持鎖的線程READ或WRITE表,其他線程被阻止。
每個(gè)線程等待(沒(méi)有超時(shí))直到它獲得它請(qǐng)求的所有鎖。
WRITE鎖通常比READ鎖有更高的優(yōu)先級(jí),以確保更改盡快被處理。這意味著,如果一個(gè)線程獲得READ鎖,并且然后另外一個(gè)線程請(qǐng)求一個(gè)WRITE鎖,隨后的READ鎖請(qǐng)求將等待直到WRITE線程得到了鎖并且釋放了它。
顯然對(duì)于檢查,你只需要獲得讀鎖。再者鐘情跨下,只能讀取表,但不能修改它,因此他也允許其它客戶機(jī)讀取表。對(duì)于修復(fù),你必須獲得些所以防止任何客戶機(jī)在你對(duì)表進(jìn)行操作時(shí)修改它。
2.外部鎖定
服務(wù)器還可以使用外部鎖定(文件級(jí)鎖)來(lái)防止其它程序在服務(wù)器使用表時(shí)修改文件。通常,在表的檢查操作中服務(wù)器將外部鎖定與myisamchk或isamchk作合使用。但是,外部鎖定在某些系統(tǒng)中是禁用的,因?yàn)樗荒芸煽康倪M(jìn)行工作。對(duì)運(yùn)行myisamchk或isamchk所選擇的過(guò)程取決于服務(wù)器是否能使用外部鎖定。如果不使用,則必修使用內(nèi)部鎖定協(xié)議。
如果服務(wù)器用--skip-locking選項(xiàng)運(yùn)行,則外部鎖定禁用。該選項(xiàng)在某些系統(tǒng)中是缺省的,如Linux??梢酝ㄟ^(guò)運(yùn)行mysqladminvariables命令確定服務(wù)器是否能夠使用外部鎖定。檢查skip_locking變量的值并按以下方法進(jìn)行:
如果skip_locking為off,則外部鎖定有效您可以繼續(xù)并運(yùn)行人和一個(gè)實(shí)用程序來(lái)檢查表。服務(wù)器和實(shí)用程序?qū)⒑献鲗?duì)表進(jìn)行訪問(wèn)。但是,運(yùn)行任何一個(gè)實(shí)用程序之前,應(yīng)該使用mysqladminflush-tables。為了修復(fù)表,應(yīng)該使用表的修復(fù)鎖定協(xié)議。
如果skip_locaking為on,則禁用外部鎖定,所以在myisamchk或isamchk檢查修復(fù)表示服務(wù)器并不知道,好關(guān)閉服務(wù)器。如果堅(jiān)持是服務(wù)器保持開(kāi)啟狀態(tài),月確保在您使用此表示沒(méi)有客戶機(jī)來(lái)訪問(wèn)它。必須使用卡黨的鎖定協(xié)議告訴服務(wù)器是該表不被其他客戶機(jī)訪問(wèn)。
如何檢查MySQL表的鎖定協(xié)議
本節(jié)只介紹如果使用表的內(nèi)部鎖定。對(duì)于檢查表的鎖定協(xié)議,此過(guò)程只針對(duì)表的檢查,不針對(duì)表的修復(fù)。
1.調(diào)用mysql發(fā)布下列語(yǔ)句:
$mysql–uroot–pdb_namemysql>LOCKTABLEtbl_nameREAD;mysql>FLUSHTABLES;
該鎖防止其它客戶機(jī)在檢查時(shí)寫(xiě)入該表和修改該表。FLUSH語(yǔ)句導(dǎo)致服務(wù)器關(guān)閉表的文件,它將刷新仍在告訴緩存中的任何為寫(xiě)入的改變。
2.執(zhí)行檢查過(guò)程
$myisamchktbl_name$isamchktbl_name
3.釋放表鎖
mysql>UNLOCKTABLES;
如果myisamchk或isamchk指出發(fā)現(xiàn)該表的問(wèn)題,將需要執(zhí)行表的修復(fù)。
以上就是如何鎖定MySQL數(shù)據(jù)庫(kù)表,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。