首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 資料表建立、修改與刪除完整指南:DDL 核心操作詳解

     編輯:MySQL 資料庫相關知識

資料表是關聯式資料庫儲存資料的基本單位。本文系統整理 MySQL CREATE TABLE、ALTER TABLE、DROP TABLE 核心 DDL 操作,涵蓋欄位定義、完整性約束、主外鍵、索引、分區等進階特性。

建立表:CREATE TABLE

CREATE TABLE table_name (
  column_name data_type [integrity_constraints],
  ...,
  [table_constraints]
) ENGINE=storage_engine DEFAULT CHARSET=charset;

核心完整性約束

主鍵定義範例

-- 單欄主鍵
CREATE TABLE student (
  stu_id INT PRIMARY KEY,
  name VARCHAR(20)
);

-- 複合主鍵
CREATE TABLE score (
  stu_id INT,
  course_id INT,
  score DECIMAL(5,2),
  PRIMARY KEY (stu_id, course_id)
);

外鍵定義範例

CREATE TABLE orders (
  order_id INT PRIMARY KEY,
  cust_id INT,
  FOREIGN KEY fk_cust (cust_id) REFERENCES customer(cust_id)
);

注意:子表外鍵型別、長度必須與父表主鍵完全一致。

查看表結構

約束語法說明
主鍵PRIMARY KEY唯一標識每行,非空、唯一,單欄或複合
外鍵FOREIGN KEY (col) REFERENCES parent_table(col)關聯父表主鍵,維護參考完整性
非空NOT NULL禁止 NULL 值
唯一UNIQUE值不可重複,允許多個 NULL
自增AUTO_INCREMENT整數型主鍵自動遞增,每表僅一欄
預設值DEFAULT value插入時未指定則使用預設值
命令用途輸出重點
DESCRIBE tbl / DESC tbl基本結構Field, Type, Null, Key, Default, Extra
SHOW CREATE TABLE tbl完整定義含約束、引擎、字元集、分區、自增值

修改表:ALTER TABLE

操作語法說明
改表名ALTER TABLE old_name RENAME [TO] new_name;TO 可省略
改欄位名ALTER TABLE tbl CHANGE old_col new_col new_type [constraints];需重新指定完整型別與約束
改資料型別ALTER TABLE tbl MODIFY col new_type [constraints];不改名時用 MODIFY
新增欄位ALTER TABLE tbl ADD col type [constraints] [FIRST | AFTER col2];可指定位置
刪除欄位ALTER TABLE tbl DROP col;資料永久遺失
調整欄位順序ALTER TABLE tbl MODIFY col type FIRST | AFTER col2;僅影響顯示順序
變更儲存引擎ALTER TABLE tbl ENGINE=new_engine;大表慎用,會全表重建
刪除外鍵ALTER TABLE tbl DROP FOREIGN KEY fk_name;需指定外鍵名稱(非欄位名)

刪除表:DROP TABLE

-- 普通表
DROP TABLE table_name;

-- 被引用的父表(兩種方式)
-- 方式一:先刪子表再刪父表
DROP TABLE child_table;
DROP TABLE parent_table;

-- 方式二:先刪外鍵再刪父表(推薦)
ALTER TABLE child_table DROP FOREIGN KEY fk_name;
DROP TABLE parent_table;

進階特性補充

  • 分區表:PARTITION BY RANGE/LIST/HASH/KEY,大表管理利器。
  • 生成欄 (5.7+):col INT GENERATED ALWAYS AS (expr) VIRTUAL/STORED。
  • 隱藏欄位 (8.0+):INVISIBLE,不顯示於 SELECT *。
  • CHECK 約束 (8.0.16+):CONSTRAINT chk CHECK (age > 0) 終於強制生效。

DDL 執行影響與線上變更建議

  • MySQL 5.6+ 多數 DDL 支援 ALGORITHM=INPLACE、LOCK=NONE,減少鎖定。
  • 大表變更(加欄位、改型別、加索引、換引擎)建議使用 pt-online-schema-change 或 gh-ost。
  • 變更前必備:mysqldump --no-data 結構備份、驗證回滾腳本。

掌握 DDL 核心語法與約束設計原則,是資料庫架構師與後端工程師的必修功課。善用 SHOW CREATE TABLE 審視完整定義,配合線上變更工具,讓資料庫結構演進安全、可控、無感知。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved