萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 建表、修改表、刪除表完整指南:從登入到儲存引擎選型的入門實戰

雖然圖形化工具普及,但掌握原生 SQL DDL(CREATE、ALTER、DROP)仍是資料庫工程師的基本功。本文從登入、建庫、查看引擎、建表、修改表結構、刪除表的完整流程,搭配實戰範例與最佳實踐,打造堅實的 DDL 基礎。

1. 登入 MySQL

mysql -h localhost -u root -p
# -h 主機 (預設 localhost 可省略)
# -u 使用者
# -p 密碼 (輸入後隱藏顯示)

2. 資料庫基本操作

-- 查看現有資料庫
SHOW DATABASES;

-- 建立資料庫 (建議指定字符集)
CREATE DATABASE `example` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 刪除資料庫 (謹慎!)
DROP DATABASE `example`;

3. 存儲引擎認知與選型

SHOW ENGINES;
InnoDB 是 5.5+ 預設且唯一支援事務的通用引擎,無特殊理由請直接用 InnoDB。

4. 建表實戰範本

CREATE TABLE `users` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `username` VARCHAR(50) NOT NULL COMMENT '用戶名',
  `email` VARCHAR(100) NOT NULL COMMENT '信箱',
  `password_hash` CHAR(60) NOT NULL COMMENT 'bcrypt 雜湊',
  `status` TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1啟用 0停用',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_username` (`username`),
  UNIQUE KEY `uk_email` (`email`),
  KEY `idx_status_created` (`status`, `created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用戶表';

建表黃金法則

  • 主鍵:BIGINT UNSIGNED AUTO_INCREMENT,無業務含義
  • 字符集:統一 utf8mb4 + utf8mb4_unicode_ci(或 0900_ai_ci)
  • 非空:業務必要欄位加 NOT NULL + DEFAULT
  • 註釋:表、欄位皆加 COMMENT
  • 索引:依查詢模式建立組合索引,遵循最左前綴

5. 修改表結構

引擎支援事務鎖粒度外鍵適用場景
InnoDBDEFAULT✅行鎖✅核心業務、高併發、需 ACID
MyISAMYES❌表鎖❌唯讀、日誌、全文搜尋(舊版)
MEMORYYES❌表鎖❌暫存表、快取、查找表
ARCHIVEYES❌行鎖❌海量日誌、寫一次讀少
CSVYES❌表鎖❌外部資料交換

6. 刪除表

-- 刪除表結構與資料 (不可回復)
DROP TABLE `users`;

-- 僅清空資料,保留結構 (可回滾、觸發器觸發、自增不重置)
DELETE FROM `users`;

-- 僅清空資料,保留結構 (不可回滾、不觸發觸發器、自增重置、極快)
TRUNCATE TABLE `users`;

7. 線上變更表結構 (Online DDL) 最佳實踐

  • MySQL 5.6+ 支援 ALGORITHM=INPLACE、LOCK=NONE 多數操作無鎖
  • 大表變更:pt-online-schema-change (Percona Toolkit) 或 gh-ost (GitHub) 影子表法
  • 變更前:備份、評估鎖影響、預留回滾方案、低峰期執行
DDL 雖簡單,但大表一操作就是生產事故。養成「先測試、再備份、分批改、可回滾」的肌肉記憶,才是資料庫工程師的專業素養。
copyright © 萬盛學電腦網 all rights reserved
操作語法範例備註
新增欄位ALTER TABLE users ADD COLUMN phone VARCHAR(20) AFTER email;AFTER 指定位置,可選
修改欄位型別/屬性ALTER TABLE users MODIFY COLUMN phone VARCHAR(30) NOT NULL DEFAULT '';大表會鎖表重建,慎用
重命名欄位ALTER TABLE users CHANGE COLUMN phone mobile VARCHAR(20);需重複完整定義
刪除欄位ALTER TABLE users DROP COLUMN mobile;資料永久遺失
新增索引ALTER TABLE users ADD INDEX idx_email (email);大表考慮 ALGORITHM=INPLACE
刪除索引ALTER TABLE users DROP INDEX idx_email;
修改引擎ALTER TABLE users ENGINE=InnoDB;大表參考「建新表遷移」
修改字符集ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4;必須用 CONVERT TO
重命名表RENAME TABLE users TO app_users;原子操作,極快