從創建第一張表到掌握外鍵約束、DDL 變更、數據完整性,本文為 MySQL 初學者與進階開發者提供結構化知識地圖,含標準語法、常用變體、避坑指南與生產級建議。
CREATE TABLE `user` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`username` CHAR(15) NOT NULL DEFAULT '',
`sex` ENUM('M','F') DEFAULT 'M',
`userid` VARCHAR(20) NOT NULL DEFAULT '',
PRIMARY KEY (`id`, `userid`), -- 聯合主鍵
INDEX `idx_user` (`userid`),
UNIQUE KEY `uk_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE vip_user LIKE user; -- 僅結構
CREATE TABLE vip_user SELECT * FROM user WHERE 0; -- 同效
CREATE TABLE dst_tbl (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY)
SELECT a, b, c FROM src_tbl;
DESC tbl; / SHOW COLUMNS FROM tbl; — 列定義SHOW CREATE TABLE tbl\G — 完整 DDL (垂直顯示)SHOW TABLE STATUS LIKE 'tbl'\G — 統計信息 (行數、大小、自增值)| 操作 | 語法 | 關鍵點 |
|---|---|---|
| 修改列類型/屬性 | ALTER TABLE vip MODIFY id SMALLINT DEFAULT 1; | Auto_increment 列必須是主鍵或唯一鍵首列 |
| 修改列名 + 類型 + 位置 | ALTER TABLE vip CHANGE sex usersex TINYINT DEFAULT 0 AFTER username; | CHANGE 可改名,MODIFY 不可 |
| 新增列 | ALTER TABLE vip ADD sex ENUM('M','F') DEFAULT 'M' AFTER id; | FIRST/AFTER 控制位置 |
| 刪除列 | ALTER TABLE vip DROP usersex; | 數據永久丟失,謹慎操作 |
| 重命名表 | ALTER TABLE vip RENAME TO vip_user; | 原子操作,無數據拷貝 |
| 變更引擎 | ALTER TABLE vip ENGINE=MyISAM; | 重建表,大表極慢,建議 pt-osc |
CREATE TABLE child (
id INT,
parent_id INT,
CONSTRAINT fk_child_parent
FOREIGN KEY (parent_id) REFERENCES parent(id)
ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB;
| 動作 | 父表 DELETE/UPDATE 時 | 子表 FK 可否為 NOT NULL |
|---|---|---|
| RESTRICT / NO ACTION | 阻止操作,報錯 | 是 |
| SET NULL | 子表匹配行 FK 置 NULL | 否 (必須允許 NULL) |
| CASCADE | 同步刪除/更新子表匹配行 | 是 |
-- 1. 查約束名
SHOW CREATE TABLE child\G
-- 2. 刪除
ALTER TABLE child DROP FOREIGN KEY fk_child_parent;
-- 3. 重建
ALTER TABLE child ADD CONSTRAINT fk_child_parent
FOREIGN KEY (parent_id) REFERENCES parent(id)
ON DELETE CASCADE ON UPDATE CASCADE;
SET FOREIGN_KEY_CHECKS = 0;
LOAD DATA INFILE ... / ALTER TABLE ...;
SET FOREIGN_KEY_CHECKS = 1;
速度提升 20x+,操作完成後立即開啟。
CHAR(>3) 自動轉 VARCHAR,影響存儲預估。fk_子表_父表。pt-online-schema-change / gh-ost。mysqldump --no-create-info 導出數據還原時需先建結構或關閉檢查。建表規範:InnoDB + utf8mb4 + 顯式主鍵 + 業務唯一鍵 + 命名規範。DDL 變更:區分 MODIFY/CHANGE、控制列位置、大表走在線工具。外鍵:InnoDB 專屬、三條件、級聯動作選對、大操作關檢查。將這些內化為肌肉記憶,數據庫結構演進將不再是恐懼來源,而是可控的工程動作。