內(nèi)蒙古創(chuàng)意網(wǎng)站開(kāi)發(fā)關(guān)鍵詞怎么選擇技巧
在MySQL中,FLUSH TABLES
命令的作用是刷新表。當(dāng)你使用 FLUSH TABLES
命令的具體選項(xiàng)時(shí)(例如 FLUSH TABLES WITH READ LOCK
),該選項(xiàng)必須是在 FLUSH
語(yǔ)句中唯一指定的命令。即,在一個(gè) FLUSH
語(yǔ)句中,你只能使用單一的 FLUSH TABLES
選項(xiàng)。此外,FLUSH TABLE
是 FLUSH TABLES
?等價(jià)的。
注意: 對(duì)于描述中提到的刷新操作,InnoDB引擎的行為與其他存儲(chǔ)引擎不同。在InnoDB下,執(zhí)行刷新操作會(huì)將表的內(nèi)容寫(xiě)入磁盤(pán),但表本身仍然保持打開(kāi)狀態(tài)。因此,即使表處于打開(kāi)狀態(tài),只要沒(méi)有其他寫(xiě)入操作發(fā)生,也可以復(fù)制表文件。
FLUSH TABLES 命令的使用:
-
FLUSH TABLES: 此命令關(guān)閉所有已打開(kāi)的表,強(qiáng)制所有正在使用的表關(guān)閉,并清空預(yù)處理語(yǔ)句緩存。該操作需要用戶(hù)擁有
FLUSH_TABLES
或RELOAD
權(quán)限。如果存在活躍的LOCK TABLES ... READ
,則不允許使用FLUSH TABLES
。若需刷新表并加上讀鎖,則應(yīng)使用FLUSH TABLES tbl_name ... WITH READ LOCK
替代。 -
FLUSH TABLES tbl_name [, tbl_name] ...: 通過(guò)列出一個(gè)或多個(gè)逗號(hào)分隔的表名,此操作只會(huì)刷新指定的表。類(lèi)似于沒(méi)有表名的
FLUSH TABLES
,但服務(wù)器僅針對(duì)特定表進(jìn)行刷新。如果所指定的表不存在,命令不會(huì)報(bào)錯(cuò)。該命令同樣需要FLUSH_TABLES
或RELOAD
權(quán)限。 -
FLUSH TABLES WITH READ LOCK: 該命令關(guān)閉所有打開(kāi)的表,并對(duì)所有數(shù)據(jù)庫(kù)的所有表施加全局讀鎖。適合在擁有如Veritas或ZFS等能夠快速創(chuàng)建快照的文件系統(tǒng)時(shí),作為獲取備份的便利方式。使用
UNLOCK TABLES
來(lái)釋放讀鎖。此命令獲取的是全局讀鎖而非表鎖,因此其行為不受LOCK TABLES
和UNLOCK TABLES
對(duì)表鎖定和隱式提交的相同規(guī)則約束。 -
FLUSH TABLES tbl_name [, tbl_name] ... WITH READ LOCK: 這個(gè)命令會(huì)刷新指定表,并對(duì)這些表加上讀鎖。由于它會(huì)獲取表鎖,因此除了需要
FLUSH_TABLES
或RELOAD
權(quán)限之外,還需要對(duì)每張表?yè)碛?LOCK TABLES
權(quán)限。此操作首先獲取表的排他元數(shù)據(jù)鎖,待那些使用這些表的事務(wù)完成后再進(jìn)行。接著,它會(huì)從表緩存中移除表,重新打開(kāi)表,獲取讀鎖(相當(dāng)于執(zhí)行了LOCK TABLES ... READ
),并將元數(shù)據(jù)鎖降級(jí)為共享鎖。在該過(guò)程中,其他會(huì)話可讀取表,但不能修改。 -
FLUSH TABLES tbl_name [, tbl_name] ... FOR EXPORT: 此命令是專(zhuān)門(mén)針對(duì)InnoDB表的
FLUSH TABLES
變體。它確保對(duì)指定表的更改已經(jīng)刷新到磁盤(pán),以便在服務(wù)器運(yùn)行期間可以創(chuàng)建表的二進(jìn)制副本。該操作需要FLUSH_TABLES
、RELOAD
權(quán)限,同時(shí)因?yàn)樗婕矮@取鎖以備導(dǎo)出,所以還需要每張表的LOCK TABLES
和SELECT
權(quán)限。