文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美國信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  建立 InnoDB 表格

17.6.1.1 建立 InnoDB 表格

InnoDB 表格是使用 CREATE TABLE 陳述式建立的;例如

CREATE TABLE t1 (a INT, b CHAR (20), PRIMARY KEY (a)) ENGINE=InnoDB;

InnoDB 定義為預設儲存引擎時,不需要 ENGINE=InnoDB 子句,預設情況下就是如此。但是,如果 CREATE TABLE 陳述式要在預設儲存引擎不是 InnoDB 或未知的不同 MySQL 伺服器實例上重新執行,則 ENGINE 子句很有用。您可以透過發出下列陳述式來判斷 MySQL 伺服器實例上的預設儲存引擎

mysql> SELECT @@default_storage_engine;
+--------------------------+
| @@default_storage_engine |
+--------------------------+
| InnoDB                   |
+--------------------------+

預設情況下,InnoDB 表格會在每個表格的表空間中建立。若要在 InnoDB 系統表空間中建立 InnoDB 表格,請在建立表格之前停用 innodb_file_per_table 變數。若要在一般表空間中建立 InnoDB 表格,請使用 CREATE TABLE ... TABLESPACE 語法。如需詳細資訊,請參閱第 17.6.3 節「表空間」

列格式

InnoDB 表格的列格式決定其列在磁碟上的實際儲存方式。InnoDB 支援四種列格式,每種列格式都有不同的儲存特性。支援的列格式包括 REDUNDANTCOMPACTDYNAMICCOMPRESSEDDYNAMIC 列格式是預設格式。如需列格式特性的相關資訊,請參閱第 17.10 節「InnoDB 列格式」

innodb_default_row_format 變數定義預設列格式。也可以使用 CREATE TABLEALTER TABLE 陳述式中的 ROW_FORMAT 表格選項來明確定義表格的列格式。請參閱定義表格的列格式

主索引鍵

建議為您建立的每個表格定義主索引鍵。在選擇主索引鍵欄時,請選擇具有下列特性的欄

  • 由最重要的查詢參考的欄。

  • 永遠不會留空的欄位。

  • 永遠不會有重複值的欄位。

  • 一旦插入後,數值幾乎不會變更的欄位。

例如,在包含人員資訊的表格中,您不會在 (firstname, lastname) 上建立主鍵,因為可能會有多個人擁有相同的姓名,姓名欄位可能會留空,而且有時人們會更改姓名。由於有這麼多限制,通常沒有明顯的欄位集合可以用作主鍵,因此您會建立一個新的數字 ID 欄位,作為主鍵的全部或一部分。您可以宣告一個自動遞增欄位,以便在插入資料列時自動填入遞增的值

# The value of ID can act like a pointer between related items in different tables.
CREATE TABLE t5 (id INT AUTO_INCREMENT, b CHAR (20), PRIMARY KEY (id));

# The primary key can consist of more than one column. Any autoinc column must come first.
CREATE TABLE t6 (id INT AUTO_INCREMENT, a INT, b CHAR (20), PRIMARY KEY (id,a));

有關自動遞增欄位的詳細資訊,請參閱第 17.6.1.6 節,「InnoDB 中的 AUTO_INCREMENT 處理」

雖然表格在沒有定義主鍵的情況下也可以正常運作,但主鍵與效能的許多方面有關,並且對於任何大型或經常使用的表格而言,都是至關重要的設計考量。建議您始終在CREATE TABLE 陳述式中指定主鍵。如果您建立表格、載入資料,然後執行ALTER TABLE 以稍後新增主鍵,則該操作會比建立表格時定義主鍵慢得多。有關主鍵的詳細資訊,請參閱第 17.6.2.1 節,「叢集索引和次要索引」

檢視 InnoDB 表格屬性

若要檢視 InnoDB 表格的屬性,請執行 SHOW TABLE STATUS 陳述式

mysql> SHOW TABLE STATUS FROM test LIKE 't%' \G;
*************************** 1. row ***************************
           Name: t1
         Engine: InnoDB
        Version: 10
     Row_format: Dynamic
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2021-02-18 12:18:28
    Update_time: NULL
     Check_time: NULL
      Collation: utf8mb4_0900_ai_ci
       Checksum: NULL
 Create_options: 
        Comment:

有關 SHOW TABLE STATUS 輸出的資訊,請參閱第 15.7.7.37 節,「SHOW TABLE STATUS 陳述式」

您也可以透過查詢 InnoDB Information Schema 系統表格來存取 InnoDB 表格屬性

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1' \G
*************************** 1. row ***************************
     TABLE_ID: 1144
         NAME: test/t1
         FLAG: 33
       N_COLS: 5
        SPACE: 30
   ROW_FORMAT: Dynamic
ZIP_PAGE_SIZE: 0
   SPACE_TYPE: Single
 INSTANT_COLS: 0

有關詳細資訊,請參閱第 17.15.3 節,「InnoDB INFORMATION_SCHEMA 結構描述物件表格」