CREATE TABLE <表名> (
<字段定義>, <字段定義>, ...
) ENGINE=<表類型>;
表名、字段名遵循標準識別符規則;若包含保留字,需用反引號 ` 包裹。
| 類別 | 常用類型 | 說明 |
|---|---|---|
| 數值類型 | TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT, FLOAT, DOUBLE, DECIMAL | 整數、浮點數、定點數 |
| 字符類型 | CHAR, VARCHAR, TEXT, BLOB, ENUM, SET | 定長/變長字符串、大文本、二進制、枚舉、集合 |
| 日期時間類型 | DATE, TIME, DATETIME, TIMESTAMP, YEAR | 日期、時間、日期時間、時間戳、年份 |
| 聚合類型 | JSON, GEOMETRY 等 | MySQL 5.7+ 支持 |
NULL(預設):允許插入空值。NOT NULL:禁止空值,插入時必須提供數據。TIMESTAMP 列不適用此修飾符(插入 NULL 會觸發自動賦值)。DEFAULT 'unknown'、DEFAULT 0、DEFAULT CURRENT_TIMESTAMP。NULL/NOT NULL 隱式設置:數值型 0、字符串 ''、時間戳當前時間、ENUM 第一個值。NOT NULL 且無 DEFAULT,插入時省略該字段將報錯。INT/BIGINT),自動生成遞增序列。WHERE、ORDER BY、GROUP BY、JOIN 查詢。INSERT、UPDATE、DELETE 寫入性能(需維護索引樹)。頻繁出現在 WHERE、ORDER BY、GROUP BY、JOIN ON 中的列。
-- 建表時創建
CREATE TABLE t (..., INDEX idx_name (col1, col2), ...);
-- 事後添加
CREATE INDEX idx_name ON tbl_name (col1, col2);
-- 刪除
DROP INDEX idx_name ON tbl_name;
NULL。MATCH() AGAINST() 使用。忽略過短詞(默認 <4 字符)、停用詞、高頻詞(>50% 行出現)。NOT NULL + UNIQUE。PRIMARY KEY (id)。CASCADE、SET NULL、RESTRICT、NO ACTION。ALTER TABLE tbl DROP FOREIGN KEY fk_id。| 引擎 | 特點 | 適用場景 |
|---|---|---|
| InnoDB | 事務、行級鎖、外鍵、崩潰恢復、MVCC,**默認引擎** | 核心業務、高併發、數據一致性要求高 |
| MyISAM | 表級鎖、全文索引、壓縮表、跨平台移植、不支持事務 | 只讀/多讀少寫、全文搜索、日誌/統計表 |
| MEMORY (HEAP) | 數據駐留內存、極快、不支持 TEXT/BLOB、重啟數據丟失 | 臨時表、緩存表、查找表 |
| ARCHIVE | 高壓縮、僅支持 INSERT/SELECT、無索引 | 海量日誌歸檔、審計數據 |
| CSV | 以 CSV 文件存儲、可直接用 Excel 打開、無索引 | 數據交換、報表導出 |
| BLACKHOLE | 寫入即丟棄、用於複製過濾、測試 | 主從複製中繼、壓力測試 |
| MERGE | 多個同結構 MyISAM 表的虛擬視圖 | 分區表邏輯合併查詢 |
| FEDERATED | 遠程表映射、聯邦查詢 | 跨實例異構查詢 |
-- 完整複製(含數據)
CREATE TABLE target SELECT * FROM source;
-- 部分列/條件複製
CREATE TABLE target SELECT col1, col2 FROM source WHERE ...;
-- 僅複製結構(空表)
CREATE TABLE target SELECT * FROM source WHERE 0=1;
-- 或
CREATE TABLE target LIKE source;
注意:上述方式不複製索引、主鍵、外鍵、AUTO_INCREMENT 等約束,需手動補充。
CREATE TEMPORARY TABLE tmp ...