13、不同存储引擎的数据表在文件系统里是如何表示的?
MySQL 支持 InnoDB、MyISAM、Memory、Merge、Archive、CSV、BLACKHOLE 幾種存儲引擎,不同存儲引擎的數據表在文件系統中的表示也各不相同。
MySQL 中的每一個數據表在磁盤上至少被表示為一個文件,即存放著該數據表結構定義的 .frm 文件。不同的存儲引擎還有其它用來存放數據和索引信息的文件。
從 MySQL 8.0 版本開始,frm 表結構定義文件被取消,MySQL 把表結構信息都寫到了系統表空間。
下面介紹不同存儲引擎的數據表在文件系統中是如何表示的。
MyISAM
MyISAM 存儲引擎的數據表在數據庫目錄里使用 3 個文件來代表,這些文件的基本名與數據表的名字相同,擴展名則表明了文件的具體用途。這三個文件的擴展名分別是:
- .frm:表結構定義文件,存放著該數據表的結構定義。
- .MYD:MY Data 的縮寫,數據文件,存放著該數據表中各個行的數據。
- .MYI: MY Index 的縮寫,索引文件,存放著該數據表的全部索引信息。
下面創建存儲引擎為 MyISAM 的 tb_myisam 表,SQL 語句如下。
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)本節中所有創建的不同存儲引擎的表在文件系統(數據目錄)中的表示在文章末尾展示。
MERGE
MERGE 存儲引擎的數據表其實是一個邏輯結構。它代表著由一組結構完全相同的 MyISAM 數據表所構成的集合。有關的查詢命令會把它當作一個大數據表來對待。
MERGE 存儲引擎的數據表除了擁有存儲表結構定義的 .frm 文件以外,還有一個擴展名為 .mgr 的文件,這個文件里不保存數據,而是數據的來源地。通俗的說,就是一份由多個 MyISAM 數據表的名單構成的 MERGE 數據表。
下面創建存儲引擎為 MERGE 的 tb_merge 表,SQL 語句如下。
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
對于 InnoDB 存儲引擎的數據表,一個表對應兩個文件,一個是 *.frm,存儲表結構信息;一個是 *.ibd,存儲表中數據。
下面創建存儲引擎為 InnoDB 的 tb_innodb 表,SQL 語句如下。
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 存儲引擎的數據表是創建在內存中的數據表。因為 MySQL 服務器把 Memory 數據表的數據和索引都存放在了內存中而不是硬盤上,所以除了相應的 .frm 文件外,Memory 引擎表在文件系統里沒有其它相應的代表文件。
下面創建存儲引擎為 Memory 的 tb_memory 表,SQL 語句如下。
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 存儲引擎的數據表除了擁有 .frm 表結構定義文件外,還有一個擴展名為 .arz 的數據文件,用來存儲歷史歸檔數據。執行優化操作時可能還會出現一個擴展名為 .arn 的文件。
下面創建存儲引擎為 Archive 的 tb_archive 表,SQL 語句如下。
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
與其它類型的存儲引擎相同,CSV 引擎表也會包含一個 .frm 表結構定義文件,此外還會創建一個擴展名為 .CSV 的數據文件。這個文件是 CSV 格式的文本文件,用來保存表中的實際數據。
.CSV 文件可以直接在 Excel 中打開,或者是使用其它文件編輯工具查看。另外,還有一個同名的元信息文件,文件擴展名為 .CSM,用來保存表的狀態及表中保存的數據量。
由于 CSV 文件可被直接編輯,如果操作得當,可以不通過 SQL 語句直接修改 CSV 文件中的內容。
CSV 存儲引擎基于 CSV 格式文件存儲數據,由于自身文件格式的原因,所有列必須強制指定 NOT NULL。
下面創建存儲引擎為 CSV 的 tb_csv 表,SQL 語句如下。
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 存儲引擎的數據表中寫入任何數據都會消失,所以除了 .frm 文件,BLACKHOLE 引擎表沒有其他相應的代表文件。
下面創建存儲引擎為 BLACKHOLE 的 tb_blackhole 表,SQL 語句如下。
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)下圖是不同存儲引擎的數據表在文件系統中的表示。
總結
以上是生活随笔為你收集整理的13、不同存储引擎的数据表在文件系统里是如何表示的?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 12、MyISAM存储引擎
- 下一篇: java信息管理系统总结_java实现科