13、不同存储引擎的数据表在文件系统里是如何表示的?
MySQL 支持 InnoDB、MyISAM、Memory、Merge、Archive、CSV、BLACKHOLE 幾種存儲(chǔ)引擎,不同存儲(chǔ)引擎的數(shù)據(jù)表在文件系統(tǒng)中的表示也各不相同。
MySQL 中的每一個(gè)數(shù)據(jù)表在磁盤上至少被表示為一個(gè)文件,即存放著該數(shù)據(jù)表結(jié)構(gòu)定義的 .frm 文件。不同的存儲(chǔ)引擎還有其它用來存放數(shù)據(jù)和索引信息的文件。
從 MySQL 8.0 版本開始,frm 表結(jié)構(gòu)定義文件被取消,MySQL 把表結(jié)構(gòu)信息都寫到了系統(tǒng)表空間。
下面介紹不同存儲(chǔ)引擎的數(shù)據(jù)表在文件系統(tǒng)中是如何表示的。
MyISAM
MyISAM 存儲(chǔ)引擎的數(shù)據(jù)表在數(shù)據(jù)庫(kù)目錄里使用 3 個(gè)文件來代表,這些文件的基本名與數(shù)據(jù)表的名字相同,擴(kuò)展名則表明了文件的具體用途。這三個(gè)文件的擴(kuò)展名分別是:
- .frm:表結(jié)構(gòu)定義文件,存放著該數(shù)據(jù)表的結(jié)構(gòu)定義。
- .MYD:MY Data 的縮寫,數(shù)據(jù)文件,存放著該數(shù)據(jù)表中各個(gè)行的數(shù)據(jù)。
- .MYI: MY Index 的縮寫,索引文件,存放著該數(shù)據(jù)表的全部索引信息。
下面創(chuàng)建存儲(chǔ)引擎為 MyISAM 的 tb_myisam 表,SQL 語(yǔ)句如下。
mysql> SET default_storage_engine=MyISAM; Query OK, 0 rows affected (0.02 sec)mysql> CREATE TABLE tb_myisam(-> id INT-> ); Query OK, 0 rows affected (0.03 sec)本節(jié)中所有創(chuàng)建的不同存儲(chǔ)引擎的表在文件系統(tǒng)(數(shù)據(jù)目錄)中的表示在文章末尾展示。
MERGE
MERGE 存儲(chǔ)引擎的數(shù)據(jù)表其實(shí)是一個(gè)邏輯結(jié)構(gòu)。它代表著由一組結(jié)構(gòu)完全相同的 MyISAM 數(shù)據(jù)表所構(gòu)成的集合。有關(guān)的查詢命令會(huì)把它當(dāng)作一個(gè)大數(shù)據(jù)表來對(duì)待。
MERGE 存儲(chǔ)引擎的數(shù)據(jù)表除了擁有存儲(chǔ)表結(jié)構(gòu)定義的 .frm 文件以外,還有一個(gè)擴(kuò)展名為 .mgr 的文件,這個(gè)文件里不保存數(shù)據(jù),而是數(shù)據(jù)的來源地。通俗的說,就是一份由多個(gè) MyISAM 數(shù)據(jù)表的名單構(gòu)成的 MERGE 數(shù)據(jù)表。
下面創(chuàng)建存儲(chǔ)引擎為 MERGE 的 tb_merge 表,SQL 語(yǔ)句如下。
mysql> SET default_storage_engine=Merge; Query OK, 0 rows affected (0.00 sec)mysql> CREATE TABLE tb_merge(-> id INT-> ); Query OK, 0 rows affected (0.02 sec)InnoDB
對(duì)于 InnoDB 存儲(chǔ)引擎的數(shù)據(jù)表,一個(gè)表對(duì)應(yīng)兩個(gè)文件,一個(gè)是 *.frm,存儲(chǔ)表結(jié)構(gòu)信息;一個(gè)是 *.ibd,存儲(chǔ)表中數(shù)據(jù)。
下面創(chuàng)建存儲(chǔ)引擎為 InnoDB 的 tb_innodb 表,SQL 語(yǔ)句如下。
mysql> SET default_storage_engine=InnoDB; Query OK, 0 rows affected (0.00 sec)mysql> CREATE TABLE tb_innodb(-> id INT-> ); Query OK, 0 rows affected (0.10 sec)Memory
Memory 存儲(chǔ)引擎的數(shù)據(jù)表是創(chuàng)建在內(nèi)存中的數(shù)據(jù)表。因?yàn)?MySQL 服務(wù)器把 Memory 數(shù)據(jù)表的數(shù)據(jù)和索引都存放在了內(nèi)存中而不是硬盤上,所以除了相應(yīng)的 .frm 文件外,Memory 引擎表在文件系統(tǒng)里沒有其它相應(yīng)的代表文件。
下面創(chuàng)建存儲(chǔ)引擎為 Memory 的 tb_memory 表,SQL 語(yǔ)句如下。
mysql> SET default_storage_engine=Memory; Query OK, 0 rows affected (0.00 sec)mysql> CREATE TABLE tb_memory(-> id INT-> ); Query OK, 0 rows affected (0.03 sec)Archive
Archive 存儲(chǔ)引擎的數(shù)據(jù)表除了擁有 .frm 表結(jié)構(gòu)定義文件外,還有一個(gè)擴(kuò)展名為 .arz 的數(shù)據(jù)文件,用來存儲(chǔ)歷史歸檔數(shù)據(jù)。執(zhí)行優(yōu)化操作時(shí)可能還會(huì)出現(xiàn)一個(gè)擴(kuò)展名為 .arn 的文件。
下面創(chuàng)建存儲(chǔ)引擎為 Archive 的 tb_archive 表,SQL 語(yǔ)句如下。
mysql> SET default_storage_engine=Archive; Query OK, 0 rows affected (0.00 sec)mysql> CREATE TABLE tb_archive(-> id INT-> ); Query OK, 0 rows affected (0.04 sec)CSV
與其它類型的存儲(chǔ)引擎相同,CSV 引擎表也會(huì)包含一個(gè) .frm 表結(jié)構(gòu)定義文件,此外還會(huì)創(chuàng)建一個(gè)擴(kuò)展名為 .CSV 的數(shù)據(jù)文件。這個(gè)文件是 CSV 格式的文本文件,用來保存表中的實(shí)際數(shù)據(jù)。
.CSV 文件可以直接在 Excel 中打開,或者是使用其它文件編輯工具查看。另外,還有一個(gè)同名的元信息文件,文件擴(kuò)展名為 .CSM,用來保存表的狀態(tài)及表中保存的數(shù)據(jù)量。
由于 CSV 文件可被直接編輯,如果操作得當(dāng),可以不通過 SQL 語(yǔ)句直接修改 CSV 文件中的內(nèi)容。
CSV 存儲(chǔ)引擎基于 CSV 格式文件存儲(chǔ)數(shù)據(jù),由于自身文件格式的原因,所有列必須強(qiáng)制指定 NOT NULL。
下面創(chuàng)建存儲(chǔ)引擎為 CSV 的 tb_csv 表,SQL 語(yǔ)句如下。
mysql> SET default_storage_engine=csv; Query OK, 0 rows affected (0.02 sec)mysql> CREATE TABLE tb_csv(-> id INT NOT NULL,-> name CHAR(10) NOT NULL-> ); Query OK, 0 rows affected (0.04 sec)BLACKHOLE
由于在 BLACKHOLE 存儲(chǔ)引擎的數(shù)據(jù)表中寫入任何數(shù)據(jù)都會(huì)消失,所以除了 .frm 文件,BLACKHOLE 引擎表沒有其他相應(yīng)的代表文件。
下面創(chuàng)建存儲(chǔ)引擎為 BLACKHOLE 的 tb_blackhole 表,SQL 語(yǔ)句如下。
mysql> SET default_storage_engine=BLACKHOLE; Query OK, 0 rows affected (0.00 sec)mysql> CREATE TABLE tb_blackhole(-> id INT-> ); Query OK, 0 rows affected (0.03 sec)下圖是不同存儲(chǔ)引擎的數(shù)據(jù)表在文件系統(tǒng)中的表示。
總結(jié)
以上是生活随笔為你收集整理的13、不同存储引擎的数据表在文件系统里是如何表示的?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 12、MyISAM存储引擎
- 下一篇: 14、查看和修改默认存储引擎