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

MySQL ALTER TABLE 全攻略:增刪改列、重命名、索引與約束管理

     編輯:MySQL 資料庫相關知識

一、查看表結構

DESC tbl;
SHOW CREATE TABLE tbl;

二、修改表名

ALTER TABLE old_name RENAME new_name;
-- 或
RENAME TABLE old_name TO new_name;

三、列操作

操作語法範例
增加列ADD COLUMN col_defALTER TABLE t ADD COLUMN email VARCHAR(100) NOT NULL;
增加多列ADD COLUMN c1 def, ADD COLUMN c2 defALTER TABLE t ADD COLUMN a INT, ADD COLUMN b VARCHAR(20);
刪除列DROP COLUMN colALTER TABLE t DROP COLUMN old_col;
修改列名 + 類型CHANGE old_col new_col new_defALTER TABLE t CHANGE name full_name VARCHAR(50);
僅修改類型/屬性MODIFY col new_defALTER TABLE t MODIFY name VARCHAR(100) NOT NULL;

CHANGE 必須給新列名(可同名),MODIFY 僅改定義。修改列類型可能觸發表重建,大表慎操作。

四、跨資料庫修改列名語法差異

-- MySQL
ALTER TABLE t CHANGE old_col new_col INT;

-- SQL Server
EXEC sp_rename 't.old_col', 'new_col', 'COLUMN';

-- Oracle
ALTER TABLE t RENAME COLUMN old_col TO new_col;

五、主鍵約束

-- 增加(若表無 PK)
ALTER TABLE t ADD PRIMARY KEY (id);
-- 或命名約束
ALTER TABLE t ADD CONSTRAINT pk_t PRIMARY KEY (id);

-- 刪除
ALTER TABLE t DROP PRIMARY KEY;

六、外鍵約束

-- 增加
ALTER TABLE child
ADD CONSTRAINT fk_child_parent
FOREIGN KEY (parent_id) REFERENCES parent(id);

-- 刪除(需約束名,區分大小寫)
ALTER TABLE child DROP FOREIGN KEY fk_child_parent;

七、索引管理

-- 建立普通索引
ALTER TABLE t ADD INDEX idx_name (name);
CREATE INDEX idx_name ON t (name);

-- 建立唯一索引
ALTER TABLE t ADD UNIQUE INDEX uk_email (email);
CREATE UNIQUE INDEX uk_email ON t (email);

-- 刪除
DROP INDEX idx_name ON t;
ALTER TABLE t DROP INDEX idx_name;

八、常用組合操作範例

-- 重建主鍵(先刪後加)
ALTER TABLE t DROP PRIMARY KEY;
ALTER TABLE t ADD PRIMARY KEY (id);

-- 修改列名 + 類型
ALTER TABLE wd_express CHANGE COLUMN express_id id INT;

-- 增加主鍵
ALTER TABLE wd_express ADD PRIMARY KEY (id);

-- 修改列類型
ALTER TABLE t MODIFY address CHAR(10);
-- 或
ALTER TABLE t CHANGE address address CHAR(40);

九、避坑提醒

  1. 大表 DDL 鎖表:5.6+ 支援 ALGORITHM=INPLACE、LOCK=NONE,或用 pt-online-schema-change/gh-ost 線上變更。
  2. CHANGE 修改列名時若不指定完整定義,舊屬性(NOT NULL、DEFAULT 等)可能丟失,建議寫全 CHANGE old new VARCHAR(50) NOT NULL DEFAULT ''。
  3. 外鍵約束名在 information_schema.TABLE_CONSTRAINTS 查詢,刪除時必須精確大小寫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved