ALTER TABLE 是資料庫結構變更的核心指令。本文整理新增/刪除/修改欄位、重命名、主鍵約束、重組儲存等常用語法,並釐清 Oracle 與 SQL Server 語法差異,做為 DBA 開發參考手冊。
| 操作類別 | Oracle 語法 | 範例 | 備註 |
|---|---|---|---|
| 新增欄位 | ALTER TABLE tbl ADD (col datatype [DEFAULT val] [CONSTRAINT...]); | ALTER TABLE docdsp ADD (dspcode CHAR(200)); | 支援一次新增多欄位 |
| 刪除欄位 | ALTER TABLE tbl DROP COLUMN col; | ALTER TABLE docdsp DROP COLUMN dspcode; | 12c+ 支援 DROP UNUSED COLUMNS 釋放空間 |
| 修改欄位型別/預設值 | ALTER TABLE tbl MODIFY (col new_datatype [DEFAULT val]); | ALTER TABLE emp MODIFY (sal NUMBER(10,2) DEFAULT 0); | 有資料時受型別相容限制 |
| 重命名欄位 | ALTER TABLE tbl RENAME COLUMN old_name TO new_name; | ALTER TABLE emp RENAME COLUMN sal TO salary; | 10g+ 支援,舊版需重建表 |
| 重命名表 | RENAME old_table TO new_table; | RENAME emp TO employees; | 非 ALTER TABLE,獨立 DDL |
| 新增主鍵 | ALTER TABLE tbl ADD CONSTRAINT pk_name PRIMARY KEY (col); | ALTER TABLE emp ADD CONSTRAINT pk_emp PRIMARY KEY (empno); | 自動建立唯一索引 |
| 新增外鍵 | ALTER TABLE child ADD CONSTRAINT fk_name FOREIGN KEY (col) REFERENCES parent(pcol); | ALTER TABLE emp ADD CONSTRAINT fk_dept FOREIGN KEY (deptno) REFERENCES dept(deptno); | 需父表有主鍵/唯一鍵 |
| 啟用/停用約束 | ALTER TABLE tbl ENABLE/DISABLE CONSTRAINT constr_name; | ALTER TABLE emp DISABLE CONSTRAINT fk_dept; | 大量載入資料時暫停約束提升效能 |
| 移動表空間 | ALTER TABLE tbl MOVE TABLESPACE new_ts; | ALTER TABLE big_table MOVE TABLESPACE users_large; | 會鎖表,建議配合 ONLINE (12c+) |
| 壓縮表 | ALTER TABLE tbl MOVE COMPRESS FOR OLTP; | ALTER TABLE sales MOVE COMPRESS FOR QUERY HIGH; | 需 Advanced Compression 授權 |
ALTER COLUMN,Oracle 用 MODIFYsp_rename 預存程序,Oracle 用 RENAME COLUMN / RENAME TABLEIDENTITY 對應 Oracle Sequence/Identity ColumnV$LOCKED_OBJECT)熟練 ALTER TABLE 語法並建立標準化變更流程,是資料庫結構演進的基石。