首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle ALTER TABLE 完整操作指南:重命名、增刪欄位、修改型別、約束管理與最佳實務

     編輯:Oracle 資料庫基礎

基本語法結構

ALTER TABLE table_name { 
  RENAME TO new_table_name
| ADD (col_def [, col_def]...)
| DROP COLUMN col_name
| MODIFY col_name new_datatype
| RENAME COLUMN old_name TO new_name
| ADD CONSTRAINT constraint_def
| DROP CONSTRAINT constraint_name [CASCADE]
| ENABLE/DISABLE CONSTRAINT constraint_name
};

實戰範例集

1. 表重命名

ALTER TABLE test RENAME TO test1;
-- 或標準 SQL
RENAME test1 TO test2;

2. 增加欄位

ALTER TABLE test2 ADD (c VARCHAR2(30));
ALTER TABLE test2 ADD (d VARCHAR2(30), e NUMBER(4));

3. 刪除欄位

ALTER TABLE test2 DROP COLUMN f;
-- 12c+ 可用 SET UNUSED 避免鎖表,稍後 DROP UNUSED COLUMNS

4. 修改欄位型別/長度

ALTER TABLE test2 MODIFY d VARCHAR2(40);
-- 注意:含資料欄位縮小長度需確保現有資料符合新長度,否則報 ORA-01441

5. 重命名欄位

ALTER TABLE test2 RENAME COLUMN e TO f;

6. 約束管理

-- 增加主鍵(複合鍵)
ALTER TABLE test2 ADD CONSTRAINT pk_mypri PRIMARY KEY (d, f);

-- 增加外鍵(複合鍵、級聯刪除)
ALTER TABLE employees ADD CONSTRAINT emp_jobs_fk 
  FOREIGN KEY (job, deptno) REFERENCES jobs (jobid, deptno) ON DELETE CASCADE;

-- 刪除主鍵並級聯刪除參考此主鍵的外鍵
ALTER TABLE dept DROP PRIMARY KEY CASCADE;

-- 停用/啟用約束(大量載入資料時提升效能)
ALTER TABLE emp DISABLE CONSTRAINT fk_deptno;
ALTER TABLE emp ENABLE CONSTRAINT fk_deptno;

進階特性(11g/12c/19c)

特性語法範例優點
SET UNUSEDALTER TABLE t SET UNUSED COLUMN col1;標記為未用,不實際刪除資料,鎖表極短,稍後 DROP UNUSED COLUMNS 批次清理
ONLINE DDLALTER TABLE t MOVE PARTITION p1 ONLINE;12c+ 分區移動不阻塞 DML
DEFAULT ON NULLALTER TABLE t MODIFY col DEFAULT ON NULL 'N';12c+ 插入 NULL 時自動套用 DEFAULT
INVISIBLE COLUMNSALTER TABLE t MODIFY col INVISIBLE;12c+ 對 SELECT * 隱藏,應用不受影響
ADD COLUMN WITH DEFAULTALTER TABLE t ADD col NUMBER DEFAULT 0 NOT NULL;11g+ 瞬時完成(元資料修改),無需全表更新

避坑指南

  1. 大表 DROP COLUMN 會全表重寫,鎖表時間長,生產環境用 SET UNUSED + 維護窗口 DROP UNUSED COLUMNS。
  2. MODIFY 型別縮小 必須先驗證資料:SELECT MAX(LENGTH(col)) FROM t 或 SELECT col FROM t WHERE LENGTH(col) > new_len。
  3. 外鍵 CASCADE 刪除父表記錄會連帶刪除子表記錄,極度謹慎,建議改用 ON DELETE SET NULL 或應用層軟刪除。
  4. 約束狀態:ENABLE VALIDATE(預設,檢查現有資料)、ENABLE NOVALIDATE(僅檢查新資料,適合大表加約束)、DISABLE(不檢查)。
  5. 統計資訊:結構變更後執行 DBMS_STATS.GATHER_TABLE_STATS,否則優化器可能產生錯誤執行計畫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved