從創建表到結構變更、外鍵管理、關聯表安全刪除,本文匯總 MySQL DDL/DML 高頻語句標準語法、完整性約束條件、實戰示例與避坑提示,作為開發、DBA 日常操作速查手冊。
CREATE TABLE [IF NOT EXISTS] table_name (
column_name data_type [integrity_constraints],
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
| 約束 | 作用 | 示例 |
|---|---|---|
| PRIMARY KEY | 主鍵,唯一標識,非空 | id BIGINT PRIMARY KEY AUTO_INCREMENT |
| FOREIGN KEY | 外鍵,關聯父表主鍵 | FOREIGN KEY (dept_id) REFERENCES dept(id) |
| NOT NULL | 非空 | name VARCHAR(32) NOT NULL |
| UNIQUE | 唯一 | email VARCHAR(128) UNIQUE |
| AUTO_INCREMENT | 自增 | id INT AUTO_INCREMENT |
| DEFAULT | 默認值 | status TINYINT DEFAULT 1 |
CREATE TABLE example (
id INT,
name VARCHAR(20),
sex BOOLEAN
);
DESC table_name; -- 簡要:Field, Type, Null, Key, Default, Extra SHOW CREATE TABLE table_name\G -- 完整 DDL:含引擎、字符集、索引、註釋、外鍵定義
| 操作 | 語法 | 示例 |
|---|---|---|
| 修改表名 | ALTER TABLE old_name RENAME [TO] new_name; | ALTER TABLE user RENAME TO users; |
| 修改列類型 | ALTER TABLE tbl MODIFY col new_type; | ALTER TABLE users MODIFY name VARCHAR(64); |
| 修改列名+類型 | ALTER TABLE tbl CHANGE old_col new_col new_type; | ALTER TABLE users CHANGE name username VARCHAR(64); |
| 新增列 | ALTER TABLE tbl ADD col type [constraints] [FIRST | AFTER col2]; | ALTER TABLE users ADD age TINYINT AFTER username; |
| 刪除列 | ALTER TABLE tbl DROP col; | ALTER TABLE users DROP age; |
-- 查看外鍵名 SHOW CREATE TABLE child_table\G -- 刪除外鍵 ALTER TABLE child_table DROP FOREIGN KEY fk_name;
DROP TABLE table_name;
警告:數據永久丟失,操作前必備份。
場景:parent (id PK) ← child (pid FK 引用 parent.id)。
直接 DROP TABLE parent 報錯:Cannot drop table 'parent' referenced by a foreign key constraint。
DROP TABLE child;DROP TABLE parent;缺點:子表其他業務數據連帶丟失。
ALTER TABLE child DROP FOREIGN KEY fk_name;SHOW CREATE TABLE child\G 確認外鍵消失。DROP TABLE parent;優點:子表數據完整保留,僅移除引用約束。
ENGINE=InnoDB、CHARSET=utf8mb4、COMMENT。BIGINT UNSIGNED AUTO_INCREMENT。NOT NULL DEFAULT '' 或 0,拒絕 NULL。ALTER TABLE 大表必用在線變更工具,避免長時間鎖表。CONSTRAINT fk_child_parent FOREIGN KEY...,便於管理。規範的表操作習慣,是數據庫穩定運行的基石。