掌握 DDL (Data Definition Language) 是操作 MySQL 的基石。本文以 MariaDB/MySQL 為例,系統講解資料庫與資料表的全生命週期管理命令,含實戰輸出解讀與避坑指南。
-- 1. 查看所有資料庫 SHOW DATABASES; -- 2. 創建資料庫 (指定字符集,推薦 utf8mb4) CREATE DATABASE mydb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; -- 3. 避免重複報錯 CREATE DATABASE IF NOT EXISTS mydb; -- 4. 進入資料庫 USE mydb; -- 5. 刪除資料庫 (謹慎!) DROP DATABASE mydb;
-- 基礎語法 CREATE TABLE users ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, username VARCHAR(30) NOT NULL UNIQUE, email VARCHAR(100) NOT NULL, age TINYINT UNSIGNED DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 關鍵點解析: -- INT UNSIGNED: 非負整數,擴大正數範圍 -- AUTO_INCREMENT: 自增主鍵 -- PRIMARY KEY: 主鍵約束 (隱含 NOT NULL + UNIQUE) -- UNIQUE: 唯一約束 -- DEFAULT: 預設值 -- ENGINE=InnoDB: 支援事務、行鎖、外鍵 -- CHARSET=utf8mb4: 支援 Emoji 完整 Unicode
-- 方法一:DESC / DESCRIBE (簡略) DESC users; -- 方法二:SHOW CREATE TABLE (完整建表語句,含約束名、引擎、字符集) SHOW CREATE TABLE users\G -- \G 垂直顯示,適合寬表
-- 新增欄位 ALTER TABLE users ADD COLUMN phone VARCHAR(11) AFTER email; ALTER TABLE users ADD COLUMN status TINYINT DEFAULT 1 FIRST; -- FIRST 放最前 -- 刪除欄位 ALTER TABLE users DROP COLUMN phone; -- 修改欄位名 + 類型 (CHANGE 需指定舊名新名) ALTER TABLE users CHANGE COLUMN username user_name VARCHAR(50) NOT NULL; -- 僅修改類型/屬性 (MODIFY) ALTER TABLE users MODIFY COLUMN age SMALLINT UNSIGNED DEFAULT 0; -- 重命名表 ALTER TABLE users RENAME TO app_users; -- 或 RENAME TABLE app_users TO users;
-- 僅複製結構 (含索引、約束、引擎、字符集) CREATE TABLE users_backup LIKE users; -- 複製結構 + 數據 CREATE TABLE users_copy AS SELECT * FROM users; -- 可加 WHERE 條件篩選數據 CREATE TABLE active_users AS SELECT * FROM users WHERE status = 1;
DROP TABLE users; DROP TABLE IF EXISTS users; -- 安全寫法
| 約束 | 關鍵字 | 說明 |
|---|---|---|
| 主鍵 | PRIMARY KEY | 唯一標識行,隱含 NOT NULL + UNIQUE,一表僅一個 |
| 外鍵 | FOREIGN KEY | 引用父表主鍵/唯一鍵,需 InnoDB 支援 |
| 唯一 | UNIQUE | 值不可重複,允許多個 NULL |
| 非空 | NOT NULL | 禁止插入 NULL |
| 預設值 | DEFAULT | INSERT 未指定時自動填充 |
| 自增 | AUTO_INCREMENT | 整數主鍵自動遞增 |
utf8mb4,避免亂碼。pt-online-schema-change 或 MySQL 8.0+ 瞬時 DDL,避免鎖表阻塞。熟練掌握上述 DDL 操作,並理解每個約束與選項的深層含義,是成為優秀後端工程師與 DBA 的必修課。