接續基礎篇,深入講解主鍵/唯一/默認約束的增刪、列定義修改(MODIFY/CHANGE)、表重命名兩種方式,附圖形化驗證截圖說明。
-- 添加(帶約束名)
ALTER TABLE user2 ADD CONSTRAINT PK_USER2_ID PRIMARY KEY (id);
-- 刪除
ALTER TABLE user2 DROP PRIMARY KEY;
-- 添加
ALTER TABLE user2 ADD UNIQUE (username);
-- 刪除(需先查約束名)
SHOW INDEX FROM user2\G; -- 獲取 Key_name
ALTER TABLE user2 DROP INDEX 约束名;
-- 設置默認值(兩種寫法等價)
ALTER TABLE user2 ALTER age SET DEFAULT 15;
ALTER TABLE user2 MODIFY age SMALLINT DEFAULT 15;
-- 刪除默認值
ALTER TABLE user2 ALTER age DROP DEFAULT;
| 命令 | 能力 | 典型場景 |
|---|---|---|
| MODIFY | 修改類型、長度、默認值、NOT NULL、位置(FIRST/AFTER) | 不改列名時首選 |
| CHANGE | MODIFY 所有能力 + 修改列名 | 需重命名列時使用 |
-- MODIFY:調整類型並移至首列
ALTER TABLE user2 MODIFY pid VARCHAR(20) FIRST;
-- CHANGE:重命名 pid → p_id,同時改類型、位置
ALTER TABLE user2 CHANGE pid p_id SMALLINT UNSIGNED AFTER id;
-- 方式1:ALTER TABLE
ALTER TABLE user2 RENAME user3;
-- 方式2:RENAME TABLE(可一次重命名多表)
RENAME TABLE user3 TO user2;
注意:重命名表會導致視圖、存儲過程、外鍵引用失效,謹慎操作,建議維護窗口執行。
-- 添加外鍵(子表 privinces 關聯父表 user)
ALTER TABLE privinces
ADD CONSTRAINT FK_PROV_USER FOREIGN KEY (uid) REFERENCES user(id)
ON DELETE CASCADE ON UPDATE CASCADE;
-- 刪除外鍵
SHOW CREATE TABLE privinces; -- 獲取 CONSTRAINT 名
ALTER TABLE privinces DROP FOREIGN KEY FK_PROV_USER;
SHOW CREATE TABLE tbl\Gpt-online-schema-change 避免鎖表