8、如何将SQL语句映射为文件操作
介紹一下如何將 SQL 語句映射為文件操作。
1. 查詢數(shù)據(jù)表
前面介紹過,在 MySQL 中無論哪種存儲引擎的表都會有一個 .frm 文件來保存數(shù)據(jù)表的結(jié)構(gòu)定義。所以,執(zhí)行 SHOW TABLES; 語句相當(dāng)于列出數(shù)據(jù)庫目錄中所有 .frm 文件的基本名,所得到的結(jié)果是相同的。
有些數(shù)據(jù)庫系統(tǒng)使用注冊表來記錄某數(shù)據(jù)庫里的所有數(shù)據(jù)表,但 MySQL 沒有這樣做,因為,MySQL 數(shù)據(jù)目錄的層次結(jié)構(gòu)已經(jīng)把“注冊表”隱藏在其中了。
2. 創(chuàng)建數(shù)據(jù)表
創(chuàng)建數(shù)據(jù)表時,需要執(zhí)行 CREATE TABLE 語句定義數(shù)據(jù)表的結(jié)構(gòu)。無論是哪一種存儲引擎,MySQL 服務(wù)器都將創(chuàng)建一個 .frm 文件來保存數(shù)據(jù)表的結(jié)構(gòu)定義的內(nèi)部編碼。
MySQL 服務(wù)器還會根據(jù)指定數(shù)據(jù)表的具體類型創(chuàng)建出其他必要的文件。例如,它將為一個 MyISAM 數(shù)據(jù)表創(chuàng)建出一個 .MYD 數(shù)據(jù)文件和一個 .MYI 索引文件;為一個 MERGE 數(shù)據(jù)表創(chuàng)建出一個 .mgr 數(shù)據(jù)/索引文件。
對于 InnoDB 數(shù)據(jù)表,InnoDB 處理程序?qū)⒃?InnoDB 表空間里為數(shù)據(jù)表初始化一些數(shù)據(jù)和索引信息。
3. 更新數(shù)據(jù)表
當(dāng)執(zhí)行 ALTER TABLE 語句時,MySQL 服務(wù)器將對相對應(yīng)數(shù)據(jù)表的 .frm 文件重新進(jìn)行編碼,來表明數(shù)據(jù)表的結(jié)構(gòu)性變化,還要對有關(guān)的數(shù)據(jù)文件和索引文件的內(nèi)容進(jìn)行相應(yīng)的修改。
CREATE INDEX 和 DROP INDEX 等語句也是對相應(yīng)數(shù)據(jù)表的 .frm 文件重新進(jìn)行編碼,因為 MySQL 服務(wù)器在內(nèi)部是把它們當(dāng)作等效的 ALTER TABLE 語句來處理的。改變 InnoDB 數(shù)據(jù)表的結(jié)構(gòu)會引起 InnoDB 處理程序修改 InnoDB 表空間中數(shù)據(jù)表的數(shù)據(jù),同時也對索引做出相應(yīng)的修改。
4. 刪除數(shù)據(jù)表
DROP TABLE 語句是通過刪除該相應(yīng)數(shù)據(jù)表的各種有關(guān)文件而實現(xiàn)的。
對于某些數(shù)據(jù)表類型,可以通過在相應(yīng)的數(shù)據(jù)庫目錄里刪除與數(shù)據(jù)表有關(guān)的各個文件的辦法來手動刪除這個數(shù)據(jù)表。例如,假設(shè) mydb 是當(dāng)前數(shù)據(jù)庫,mytb1 是一個 MyISAM、Archive 或 MERGE 類型的數(shù)據(jù)表,那么 DROP TABLE mytb1 語句就大致等效于下面這兩條命令:
cd DATADIR(數(shù)據(jù)庫文件存放路徑)
rm -f mydb/mytb1.* 或 del mydb/mytb1.*
對于 InnoDB 數(shù)據(jù)表,因為它的某些組成部分在文件系統(tǒng)里沒有實體性的文件代表,所以沒有等效的文件系統(tǒng)命令。例如,InnoDB 數(shù)據(jù)表在文件系統(tǒng)里只有一個相應(yīng)的 .frm 文件,用文件系統(tǒng)級命令刪除這個文件后,該數(shù)據(jù)表在 InnoDB 表空間中對應(yīng)的數(shù)據(jù)和索引將沒有任何意義。
總結(jié)
以上是生活随笔為你收集整理的8、如何将SQL语句映射为文件操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 6、查看表结构命令
- 下一篇: linux cmake编译源码,linu