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;
-- 末尾增加
ALTER TABLE test ADD gender CHAR(4);
-- 指定位置增加(AFTER name)
ALTER TABLE test ADD age INT(4) AFTER name;
-- 查看結構
DESC test;
結果:列順序 id, name, age, gender。
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 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';
-- 非阻塞添加列(需滿足條件)
ALTER TABLE world ADD COLUMN email VARCHAR(50), ALGORITHM=INPLACE, LOCK=NONE;
ALGORITHM=INPLACE:避免拷貝整表,原地修改元數據。LOCK=NONE:允許並發讀寫,僅元數據鎖極短時間。ALGORITHM=COPY(鎖表)。SHOW CREATE TABLE 歸檔。pt-online-schema-change 或 gh-ost 大表無鎖變更。pt-table-checksum。