在文件系統中,MySQL將每個數據庫(也可以稱之爲schema)保存爲數據目錄下的一個子目錄。創建表時,MySQL會在數據庫子目錄下創建一個和表同名的.frm文件保存表的定義。例如創建一個名爲MyTable的表,MySQL會在MyTable.frm文件中保存該表的定義。因爲MySQL使用文件系統的目錄和文件來保存數據庫和表的定義,大小寫敏感性和具體的平臺密切相關。在Windows中,大小寫是不敏感的;而在類Unix中則是敏感的。不同的存儲引擎保存數據和索引的方式是不同的,但表的定義則是在MySQL服務層統一處理的。
可以使用SHOW TABLE STATUS命令(在MySQL 5.0以後的版本中,也可以查詢INFORMATION_SCHEMA中對應的表)顯示錶的相關信息。例如,對於mysql數據庫中的user表:
mysql> SHOW TABLE STATUS LIKE 'user_info';
+-----------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+-----------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| user_info | InnoDB | 10 | Dynamic | 0 | 0 | 16384 | 0 | 32768 | 0 | 1 | 2020-03-28 01:47:18 | NULL | NULL | utf8_general_ci | NULL | | |
+-----------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
1 row in set (0.07 sec)
輸出的結果表明,這是一個MyISAM表。輸出中還有很多其他信息以及統計信息。下面簡單介紹一下每一行的含義。
-
Name
表名。
-
Engine
表的存儲引擎類型。
-
Version
This column is unused. With the removal of .frm files in MySQL 8.0, this column now reports a hardcoded value of 10, which is the last .frm file version used in MySQL 5.7.
在8.0後是固定值10。
-
Row_format
行的格式。對於MyISAM表,可選的值爲Dynamic、Fixed或者Compressed。Dynamic的行長度是可變的,一般包含可變長度的字段,如VARCHAR或BLOB。Fixed的行長度則是固定的,只包含固定長度的列,如CHAR和INTEGER。Compressed的行則只在壓縮表中存在,請參考第19頁“MyISAM壓縮表”一節。
-
Rows
表中的行數。對於MyISAM和其他一些存儲引擎,該值是精確的,但對於InnoDB,該值是估計值。
-
Avg_row_length
平均每行包含的字節數。
-
Data_length
表數據的大小(以字節爲單位)。
-
Max_data_length
表數據的最大容量,該值和存儲引擎有關。
-
Index_length
索引的大小(以字節爲單位)。
-
Data_free
對於MyISAM表,表示已分配但目前沒有使用的空間。這部分空間包括了之前刪除的行,以及後續可以被INSERT利用到的空間。
-
Auto_increment
下一個AUTO_INCREMENT的值。
-
Create_time
表的創建時間。
-
Update_time
表數據的最後修改時間。
-
Check_time
使用CKECK TABLE命令或者myisamchk工具最後一次檢查表的時間。
-
Collation
表的默認字符集和字符列排序規則。
-
Checksum
如果啓用,保存的是整個表的實時校驗和。
-
Create_options
創建表時指定的其他選項。
-
Comment
該列包含了一些其他的額外信息。對於MyISAM表,保存的是表在創建時帶的註釋。對於InnoDB表,則保存的是InnoDB表空間的剩餘空間信息。如果是一個視圖,則該列包含“VIEW”的文本字樣。