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

MySQL ALTER TABLE 實戰:增加/刪除列、修改列屬性、重命名表完整示例

     編輯:MySQL 資料庫相關知識

ALTER TABLE 是 MySQL 結構變更核心命令。本文通過完整命令行會話演示:創建庫表、插入數據、ADD COLUMN(指定位置)、DROP COLUMN、RENAME TABLE、ALTER TABLE ... RENAME TO 兩種改表名方式、MODIFY/CHANGE 修改列定義,涵蓋日常 90% 結構變更場景。

一、環境準備與基礎操作

mysql> CREATE DATABASE gbk DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
mysql> USE gbk;
mysql> CREATE TABLE test (
    id INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name CHAR(20) NOT NULL
);
mysql> INSERT INTO test (name) VALUES ('zy'),('binghe'),('zilong'),('feng');
mysql> SELECT * FROM test;

二、增加列:ADD COLUMN

-- 末尾增加
ALTER TABLE test ADD gender CHAR(4);

-- 指定位置增加(AFTER name)
ALTER TABLE test ADD age INT(4) AFTER name;

-- 查看結構
DESC test;

結果:列順序 id, name, age, gender。

三、刪除列:DROP COLUMN

ALTER TABLE test DROP age;
DESC test;  -- 僅剩 id, name, gender

四、重命名表:兩種等價方式

-- 方式 1:RENAME TABLE(可跨庫)
RENAME TABLE test TO hello;
SHOW TABLES;  -- hello

-- 方式 2:ALTER TABLE ... RENAME TO(單庫)
ALTER TABLE hello RENAME TO world;
SHOW TABLES;  -- world

五、修改列定義:MODIFY vs CHANGE

  • MODIFY COLUMN col_name new_definition:不改列名,僅改類型/屬性。
  • CHANGE COLUMN old_name new_name new_definition:可同時改列名與定義。
-- 修改類型
ALTER TABLE world MODIFY gender VARCHAR(10);

-- 修改列名+類型
ALTER TABLE world CHANGE gender sex ENUM('M','F') NOT NULL DEFAULT 'M';

六、5.6+ 在線 DDL 優化

-- 非阻塞添加列(需滿足條件)
ALTER TABLE world ADD COLUMN email VARCHAR(50), ALGORITHM=INPLACE, LOCK=NONE;
  • ALGORITHM=INPLACE:避免拷貝整表,原地修改元數據。
  • LOCK=NONE:允許並發讀寫,僅元數據鎖極短時間。
  • 不支援 INPLACE 的操作(如修改列類型、刪除主鍵)會報錯,需 ALGORITHM=COPY(鎖表)。

七、生產環境變更清單

  1. 變更前 SHOW CREATE TABLE 歸檔。
  2. 預估數據量、鎖持有時間、主從延遲風險。
  3. 低峰期執行,開啟 pt-online-schema-change 或 gh-ost 大表無鎖變更。
  4. 驗證主從一致性:pt-table-checksum。
  5. 回滾預案:保留舊表備份、記錄反向 SQL。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved