一、三大核心存儲引擎對比
| 特性 | InnoDB | MyISAM | Memory (HEAP) |
| 事務支持 | ✅ ACID 完整支持 | ❌ 不支持 | ❌ 不支持 |
| 鎖粒度 | 行鎖 (高並發) | 表鎖 (低並發寫入) | 表鎖 |
| 外鍵約束 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
| 崩潰恢復 | ✅ Redo/Undo Log 自動恢復 | ❌ 易損壞,需 REPAIR TABLE | ❌ 重啟數據全丟失 |
| MVCC | ✅ 多版本並發控制 | ❌ | ❌ |
| 全文索引 | 5.6+ 支持 | ✅ 早期優勢 | ❌ |
| 空間索引 | 5.7+ 支持 | ✅ | ❌ |
| 數據存儲 | 聚簇索引 (主鍵順序) | 堆表 (.MYD/.MYI) | 純內存 (重啟丟失) |
| 適用場景 | 核心業務、高並發、事務、外鍵 | 只讀/多讀少寫、全文搜索、日誌歸檔 | 臨時表、查詢緩存、查找表 (數據可重建) |
默認引擎:MySQL 5.5+ 默認 InnoDB,SHOW ENGINES; 查看支持列表。
二、字符集配置 (my.cnf)
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[client]
default-character-set = utf8mb4
三、表約束語法速查 (建表時定義)
CREATE TABLE table_name (
-- 1. 主鍵
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, -- 單列主鍵
-- 或
col1 INT, col2 INT, PRIMARY KEY (col1, col2), -- 複合主鍵
-- 2. 外鍵
fk_col INT,
CONSTRAINT fk_name FOREIGN KEY (fk_col) REFERENCES ref_table(ref_col)
ON DELETE CASCADE ON UPDATE CASCADE, -- 可選級聯動作
-- 3. 非空
name VARCHAR(50) NOT NULL,
-- 或允許空
nickname VARCHAR(50) NULL,
-- 4. 唯一
email VARCHAR(100) UNIQUE,
-- 或複合唯一
UNIQUE KEY uk_name_status (name, status),
-- 5. 自增 (僅整數類型,通常配合主鍵)
seq INT AUTO_INCREMENT,
-- 6. 默認值
status TINYINT DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
四、約束修改 (ALTER TABLE)
| 操作 | SQL 示例 |
| 添加主鍵 | ALTER TABLE t ADD PRIMARY KEY (id); |
| 刪除主鍵 | ALTER TABLE t DROP PRIMARY KEY; |
| 添加外鍵 | ALTER TABLE t ADD CONSTRAINT fk_name FOREIGN KEY (col) REFERENCES ref(col); |
| 刪除外鍵 | ALTER TABLE t DROP FOREIGN KEY fk_name; |
| 修改非空 | ALTER TABLE t MODIFY col VARCHAR(50) NOT NULL; |
| 添加唯一索引 | ALTER TABLE t ADD UNIQUE KEY uk_name (name); |
| 修改自增起始值 | ALTER TABLE t AUTO_INCREMENT = 1000; |
| 修改默認值 | ALTER TABLE t ALTER COLUMN col SET DEFAULT 'new_val'; (8.0+)
ALTER TABLE t MODIFY col VARCHAR(50) DEFAULT 'new_val'; (舊版) |
五、外鍵關鍵規則
- 父表被引用列必須有索引 (主鍵/唯一鍵自動有索引)
- 子表外鍵列自動創建索引 (InnoDB)
- 數據類型、長度、字符集、校對規則 完全一致 (含 UNSIGNED/SIGNED)
- 級聯動作:
CASCADE (級聯刪除/更新)、SET NULL (置空)、RESTRICT/NO ACTION (阻止)
- 生產環境高並發慎用外鍵 (鎖開銷大),改由應用層維護一致性
六、引擎轉換