ALTER TABLE 是資料庫結構變更的核心指令。本文彙整 SQL Server、MySQL、Oracle 通用與各家差異語法,含欄位增刪改、重命名、資料型別變更、索引/主鍵/唯一限制操作、資料表重命名。
| 操作 | 語法 |
|---|---|
| 新增欄位 | ALTER TABLE table_name ADD column_name datatype |
| 刪除欄位 | ALTER TABLE table_name DROP COLUMN column_name |
| 修改欄位型別 | ALTER TABLE table_name ALTER COLUMN column_name datatype |
-- 新增欄位含預設值、非空
ALTER TABLE TableName ADD NewCol INT NOT NULL DEFAULT 0
-- 修改欄位名稱(需用 sp_rename)
EXEC sp_rename 'TableName.OldCol', 'NewCol', 'COLUMN'
-- 新增主鍵
ALTER TABLE TableName ADD CONSTRAINT PK_TableName PRIMARY KEY (Col1)
-- 新增索引
CREATE INDEX IX_TableName_Col1 ON TableName (Col1)
-- 或
ALTER TABLE TableName ADD INDEX IX_TableName_Col1 (Col1) -- SQL Server 2016+
-- 刪除索引
DROP INDEX IX_TableName_Col1 ON TableName
-- 重命名資料表
EXEC sp_rename 'OldTableName', 'NewTableName'
-- 新增欄位
ALTER TABLE table_name ADD column_name datatype
-- 修改欄位名稱與型別(需同時指定新名稱與型別)
ALTER TABLE table_name CHANGE old_col new_col datatype
-- 僅修改型別
ALTER TABLE table_name MODIFY column_name datatype
-- 刪除欄位
ALTER TABLE table_name DROP COLUMN column_name
-- 新增索引
ALTER TABLE table_name ADD INDEX idx_name (col1, col2...)
-- 新增主鍵
ALTER TABLE table_name ADD PRIMARY KEY (col1)
-- 新增唯一索引
ALTER TABLE table_name ADD UNIQUE uk_name (col1)
-- 刪除索引
ALTER TABLE table_name DROP INDEX idx_name
-- 重命名資料表
ALTER TABLE old_name RENAME new_name
-- 原始表:id, lastname, firstname, address, city
-- 1. 新增 birthday 欄位
ALTER TABLE Persons ADD birthday DATE
-- 2. 修改 birthday 型別為 YEAR
ALTER TABLE Persons ALTER COLUMN birthday YEAR -- SQL Server
ALTER TABLE Persons MODIFY birthday YEAR -- MySQL
-- 3. 刪除 birthday 欄位
ALTER TABLE Persons DROP COLUMN birthday
sp_rename,修改型別用 ALTER COLUMNCHANGE,僅改型別用 MODIFYALTER TABLE ... RENAME COLUMN、MODIFYDROP COLUMNONLINE 選項(Enterprise 版)