CREATE TABLE 是資料庫物件建立的核心指令,其語法選項極為豐富。本文詳細拆解每一個子句的功能與使用時機。
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
[table_options]
[select_statement]
titles、our_sales、my_user1。col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]
[PRIMARY KEY] [reference_definition]
-- 或表級約束:
PRIMARY KEY (index_col_name,...)
KEY [index_name] (index_col_name,...)
INDEX [index_name] (index_col_name,...)
UNIQUE [INDEX] [index_name] (index_col_name,...)
[CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...) [reference_definition]
CHECK (expr)
| 屬性 | 說明 |
|---|---|
| col_name | 欄位名稱,表內唯一,符合識別符規則 |
| type | 資料類型(部分需指定長度),詳見「MySQL 列類型篇」 |
| NOT NULL | NULL | 是否允許空值,預設為 NULL |
| DEFAULT | 指定預設值。數值型預設 0;AUTO_INCREMENT 為下一序號;時間型為「零值」;字串型為空字串;ENUM 為第一個枚舉值 |
| AUTO_INCREMENT | 自動遞增,僅限整數型,每表僅能有一個,且必須建立索引 |
| PRIMARY KEY | 主鍵約束,隱含 NOT NULL + UNIQUE |
| FOREIGN KEY | 外鍵約束,需參考父表主鍵(InnoDB 引擎支援) |
| CHECK | 檢查約束(MySQL 8.0.16+ 開始強制執行) |
ENGINE=InnoDB/MyISAM/MEMORY... 指定儲存引擎CHARSET=utf8mb4 設定字元集COMMENT='表說明' 加入備註AUTO_INCREMENT=1000 設定自增起始值CREATE TABLE new_table SELECT * FROM old_table WHERE ...;
可快速複製表結構與資料,但不會複製索引、主鍵、AUTO_INCREMENT 等約束,需事後補加。
精通 CREATE TABLE 所有選項,能建立符合業務規則、效能優化且易於維護的資料結構。建議搭配 SHOW CREATE TABLE 表名 反向查看實際生成的 DDL。