首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL DDL 入門實戰:庫表創建、修改、刪除與約束管理

     編輯:MySQL 綜合教學

MySQL DDL 入門實戰:庫表創建、修改、刪除與約束管理

數據定義語言(DDL)是構建數據庫骨架的工具。本文以實戰為導向,系統講解 CREATE/ALTER/DROP DATABASE、CREATE/ALTER/DROP TABLE、欄位屬性定義、約束類型、字符集配置等核心操作,並給出規範化命名與變更最佳實踐。

一、SQL 語言分類速覽

類別全稱核心命令作用
DDLData Definition LanguageCREATE, ALTER, DROP, TRUNCATE, RENAME定義數據庫對象結構
DMLData Manipulation LanguageINSERT, UPDATE, DELETE, SELECT操作數據內容
DCLData Control LanguageGRANT, REVOKE, COMMIT, ROLLBACK控制權限與事務

二、數據庫級操作

1. 創建數據庫

CREATE DATABASE [IF NOT EXISTS] db_name
  [[DEFAULT] CHARACTER SET charset_name]
  [[DEFAULT] COLLATE collation_name];

最佳實踐:

CREATE DATABASE IF NOT EXISTS myapp
  DEFAULT CHARACTER SET utf8mb4
  DEFAULT COLLATE utf8mb4_general_ci;
  • 強制 utf8mb4 支持 Emoji 與生僻字
  • IF NOT EXISTS 防止重複報錯

2. 查看與切換

SHOW DATABASES;
USE myapp;
SHOW TABLES;

3. 刪除數據庫

DROP DATABASE [IF EXISTS] db_name;

⚠️ 不可逆操作,生產環境嚴禁直接執行,需雙人審核+備份驗證。

三、表級操作核心

1. 創建表完整語法

CREATE TABLE [IF NOT EXISTS] tbl_name (
  col_name data_type [NOT NULL | NULL] [DEFAULT default_value]
    [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
    [COMMENT 'string'],
  [PRIMARY KEY (col_name, ...)],
  [UNIQUE KEY uk_name (col_name, ...)],
  [KEY idx_name (col_name, ...)],
  [FOREIGN KEY fk_name (col_name) REFERENCES ref_tbl(ref_col) ON DELETE CASCADE],
  [CHECK (expr)]
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

2. 實戰範例:用戶表

CREATE TABLE IF NOT EXISTS `users` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
  `username` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '用戶名',
  `email` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '郵箱',
  `phone` CHAR(11) NOT NULL DEFAULT '' COMMENT '手機號',
  `password_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT '密碼哈希',
  `status` TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '狀態:1啟用,0禁用',
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
  `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_username` (`username`),
  UNIQUE KEY `uk_email` (`email`),
  UNIQUE KEY `uk_phone` (`phone`),
  KEY `idx_status_created` (`status`, `created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用戶表';

3. 查看表結構

DESC users;
SHOW CREATE TABLE users\G

4. 刪除表

DROP TABLE [IF EXISTS] tbl_name;

四、表結構變更(ALTER TABLE)

核心原則:MySQL 5.6+ 支持 Online DDL,大部分操作不鎖表或僅短暫鎖表。但大表變更仍需謹慎規劃(pt-online-schema-change、gh-ost)。

常用變更操作

操作語法說明
修改欄位類型/屬性ALTER TABLE tbl MODIFY col NEW_TYPE [NOT NULL] [DEFAULT val] [COMMENT 'c'];類型收窄需確保現有數據兼容
修改欄位名+類型ALTER TABLE tbl CHANGE old_col new_col NEW_TYPE [NOT NULL] ...;需重新指定完整類型定義
新增欄位ALTER TABLE tbl ADD col NEW_TYPE [NOT NULL] [DEFAULT val] [FIRST | AFTER col2];指定位置可選
刪除欄位ALTER TABLE tbl DROP COLUMN col;數據永久丟失,謹慎操作
新增索引ALTER TABLE tbl ADD INDEX idx_name (col1, col2);Online DDL 支持
新增唯一索引ALTER TABLE tbl ADD UNIQUE KEY uk_name (col);大表驗證唯一性耗時長
刪除索引ALTER TABLE tbl DROP INDEX idx_name;主鍵用 DROP PRIMARY KEY
新增外鍵ALTER TABLE tbl ADD CONSTRAINT fk_name FOREIGN KEY (col) REFERENCES ref_tbl(ref_col);生產慎用,影響寫入性能
修改表名RENAME TABLE old_tbl TO new_tbl;或 ALTER TABLE old_tbl RENAME TO new_tbl;
修改字符集ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;重建表,大表極慢
修改引擎ALTER TABLE tbl ENGINE=InnoDB;重建表

五、約束類型詳解

約束關鍵字作用注意點
主鍵PRIMARY KEY唯一標識行,隱含 NOT NULL + UNIQUE單表僅一個,推薦 BIGINT UNSIGNED AUTO_INCREMENT
唯一鍵UNIQUE KEY業務唯一性(郵箱、手機、身份證)允許多個 NULL(除非 NOT NULL)
非空NOT NULL禁止 NULL,優化器可優化默認值配合使用
默認值DEFAULT插入時自動填充函數默認值 8.0.13+ 支持(如 DEFAULT (UUID()))
外鍵FOREIGN KEY引用完整性性能開銷大,互聯網核心表通常應用層維護
檢查CHECK列值滿足條件8.0.16+ 真正生效,舊版本解析但忽略

六、命名規範與變更最佳實踐

  1. 小寫+下劃線:user_order_items,避免大小寫敏感問題
  2. 前綴區分:pk_、uk_、idx_、fk_
  3. 欄位名無前綴:表名不加 t_/tbl_
  4. 大表 DDL 使用工具:pt-online-schema-change(觸發器模式)或 gh-ost(無觸發器,基於 Binlog),避免長時間元數據鎖
  5. 變更前備份:mysqldump --no-data -d db tbl > tbl_struct.sql
  6. 驗證腳本:變更後跑核心 SQL EXPLAIN 確認索引未失效

總結

DDL 是數據庫結構演進的手術刀。**規範定義、謹慎變更、工具輔助、驗證回歸** 是穩健演進四步法。掌握 CREATE/ALTER/DROP 核心語法,理解約束與索啟發式選擇,配合 Online DDL 與線上變更工具,即可安全高效地管理數據庫全生命週期結構。

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