ALTER TABLE 允許修改現有表結構:增刪欄位、建立/刪除索引、變更欄位類型、重命名欄位或表、修改表註釋與存儲引擎。
-- 將欄位 a 重命名為 b,類型保持 INTEGER ALTER TABLE t1 CHANGE a b INTEGER;
-- 使用 CHANGE(需指定舊名和新名) ALTER TABLE t1 CHANGE b b BIGINT NOT NULL; -- 使用 MODIFY(僅修改類型,不改名) ALTER TABLE t1 MODIFY b BIGINT NOT NULL;
-- 設定預設值 ALTER TABLE t1 ALTER COLUMN b SET DEFAULT 'default_val'; -- 刪除預設值 ALTER TABLE t1 ALTER COLUMN b DROP DEFAULT;
-- 新增索引 ALTER TABLE t1 ADD INDEX idx_name (column_name); -- 新增主鍵 ALTER TABLE t1 ADD PRIMARY KEY (id); -- 刪除索引 ALTER TABLE t1 DROP INDEX idx_name; -- 刪除主鍵 ALTER TABLE t1 DROP PRIMARY KEY;
-- 新增欄位(預設加到末尾) ALTER TABLE t1 ADD COLUMN c TIMESTAMP; -- 指定位置新增 ALTER TABLE t1 ADD COLUMN c INT FIRST; -- 第一列 ALTER TABLE t1 ADD COLUMN c INT AFTER b; -- 在 b 之後 -- 刪除欄位 ALTER TABLE t1 DROP COLUMN c;
ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD INDEX (c);
注意: AUTO_INCREMENT 欄位必須建立索引,且不能為 NULL。
ALTER TABLE t1 RENAME TO t2;
ALTER TABLE testalter_tbl ENGINE = MyISAM;
-- 建立測試表
CREATE TABLE testalter_tbl (
i INT,
c CHAR(1)
);
-- 刪除欄位 i
ALTER TABLE testalter_tbl DROP i;
-- 新增欄位 i 到首列
ALTER TABLE testalter_tbl ADD i INT FIRST;
-- 新增欄位 i 到 c 之後
ALTER TABLE testalter_tbl ADD i INT AFTER c;
-- 修改欄位類型
ALTER TABLE testalter_tbl MODIFY c CHAR(10);
-- 修改欄位名稱和類型
ALTER TABLE testalter_tbl CHANGE i j BIGINT;
ALTER TABLE testalter_tbl CHANGE j j INT;
-- 設定 NOT NULL 和預設值
ALTER TABLE testalter_tbl MODIFY j BIGINT NOT NULL DEFAULT 100;
-- 修改預設值
ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
-- 修改表引擎
ALTER TABLE testalter_tbl ENGINE = MyISAM;
-- 重命名表
ALTER TABLE testalter_tbl RENAME TO alter_tbl;
FIRST / AFTER 僅用於 ADD,調整位置需先 DROP 再 ADDCHANGE 需指定舊名、新名、類型;MODIFY 僅修改類型SHOW COLUMNS FROM table 驗證結構變更