表結構變更是數據庫生命周期中的常態操作。本文系統整理 MySQL 表的創建、字段增刪改、重命名、字符集變更、結構查看等核心 DDL 操作,提供標準化 SQL 模板與生產環境變更注意事項。
操作 語法模板 示例 注意事項 添加列 ALTER TABLE `tbl` ADD `col` 類型 [約束] [COMMENT] ALTER TABLE `users` ADD `avatar` VARCHAR(255) DEFAULT '' COMMENT '頭像' 大表建議 `ALGORITHM=INPLACE, LOCK=NONE` (5.6+) 修改列類型/長度/默認值 ALTER TABLE `tbl` MODIFY `col` 新類型 [約束] ALTER TABLE `users` MODIFY `sex` CHAR(2) NOT NULL DEFAULT 'U' 數據截風險:縮小長度前必須驗證現有數據 刪除列 ALTER TABLE `tbl` DROP `col` ALTER TABLE `users` DROP `avatar` 不可逆,謹慎操作,先備份 重命名列 ALTER TABLE `tbl` CHANGE `old_col` `new_col` 類型 [約束] ALTER TABLE `users` CHANGE `sex` `gender` TINYINT(1) NOT NULL DEFAULT 0 必須重新指定完整類型定義 三、 表級 DDL 操作
| 操作 | 語法模板 | 示例 | 注意事項 |
|---|---|---|---|
| 重命名表 | RENAME TABLE `old_tbl` TO `new_tbl` | RENAME TABLE `users` TO `user` | 原子操作,自動轉移權限/觸發器/索引 |
| 修改表字符集 | ALTER TABLE `tbl` CHARACTER SET = charset [COLLATE = collation] | ALTER TABLE `user` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci | 僅修改默認值,**現有列不變**;需配合 `CONVERT TO CHARACTER SET` 轉換數據 |
| 轉換表字符集(含數據) | ALTER TABLE `tbl` CONVERT TO CHARACTER SET charset [COLLATE collation] | ALTER TABLE `user` CONVERT TO CHARACTER SET utf8mb4 | 重建表,大表極慢,鎖表久,低峰期執行 |
| 刪除表 | DROP TABLE [IF EXISTS] `tbl` | DROP TABLE IF EXISTS `test9` | 不可逆,生產環境嚴禁直接 DROP,改用 RENAME 歸檔 |
gh-ost (GitHub)、pt-osc (Percona) — 在線無鎖變更,大表必用。
MySQL 表結構管理的核心在於標準化創建模板、精準掌握 ALTER TABLE 子句語義、大表變更必用在線工具。將本文 SQL 模板與變更清單固化為團隊規範,能有效避免「字段長度不夠緊急擴容鎖死庫」、「字符集轉換亂碼」、「誤刪表無法恢復」等經典生產事故。