文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美國 Letter) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  建立 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 子句。不過,如果要在預設儲存引擎不是 InnoDB 或未知的情況下,在不同的 MySQL 伺服器執行個體上重播 CREATE TABLE 陳述式,則 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 綱要物件表格」