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

Oracle 表欄位修改全操作指南:增、改、刪、重命名與註解管理

     編輯:Oracle 資料庫基礎

表結構演進是系統迭代常態。本文整理 Oracle 修改欄位的完整語法族群,涵蓋新增、修改型別/預設值/可空性、刪除、重命名欄位與表、新增註解,並說明關鍵限制與最佳實務。

一、 新增欄位 (ADD)

ALTER TABLE table_name ADD (
  column_name datatype [DEFAULT expr] [CONSTRAINT constraint_def],
  ...
);

-- 範例:新增員工編號,預設 0
ALTER TABLE emp01 ADD (eno NUMBER(4) DEFAULT 0);

注意:
• 11g 起支援 DEFAULT ... NOT NULL 瞬間完成(元資料級),無需全表更新
• 多欄位一次 ADD 減少鎖定時間

二、 修改欄位定義 (MODIFY)

ALTER TABLE table_name MODIFY (
  column_name datatype [DEFAULT expr] [NULL | NOT NULL],
  ...
);

-- 範例:擴大職稱長度並設新預設值
ALTER TABLE emp01 MODIFY job VARCHAR2(15) DEFAULT 'CLERK';

限制:
• 型別變更需資料相容(數字→字串需轉換)
• 擴大長度通常瞬間完成;縮小長度需驗證現有資料
• NOT NULL 只能加在無 NULL 值的欄位,或先更新 NULL 再加約束

三、 刪除欄位 (DROP COLUMN)

-- 立即刪除(鎖表、釋放空間)
ALTER TABLE emp01 DROP COLUMN dno;

-- 標記刪除(11g+,元資料級,空間稍後回收)
ALTER TABLE emp01 SET UNUSED COLUMN dno;
ALTER TABLE emp01 DROP UNUSED COLUMNS;

建議:大表優先用 SET UNUSED 避免長時間鎖表,維護窗口再 DROP UNUSED COLUMNS。

四、 重命名欄位 (RENAME COLUMN)

ALTER TABLE emp01 RENAME COLUMN eno TO empno;

10g 起支援,舊版需 ADD 新欄位 → UPDATE → DROP 舊欄位。

五、 重命名表 (RENAME)

RENAME emp01 TO employee;

等同 ALTER TABLE emp01 RENAME TO employee;,觸發器/視圖/同義詞需手動同步。

六、 新增/查詢/刪除註解

-- 表註解
COMMENT ON TABLE employee IS '存放員工基本資訊';

-- 欄位註解
COMMENT ON COLUMN employee.name IS '員工姓名,含中英文';

-- 查詢註解
SELECT table_name, comments FROM user_tab_comments WHERE table_name = 'EMPLOYEE';
SELECT column_name, comments FROM user_col_comments WHERE table_name = 'EMPLOYEE';

-- 移除註解
COMMENT ON TABLE employee IS '';
COMMENT ON COLUMN employee.name IS '';

七、 綜合實戰腳本:欄位演進範例

-- 1. 原始表
CREATE TABLE staff (id NUMBER, name VARCHAR2(20));

-- 2. 新增入職日期、薪資、狀態
ALTER TABLE staff ADD (
  hire_date DATE DEFAULT SYSDATE,
  salary    NUMBER(8,2) DEFAULT 30000,
  status    CHAR(1) DEFAULT 'A' CHECK (status IN ('A','L','R'))
);

-- 3. 擴大姓名長度、薪資精度
ALTER TABLE staff MODIFY (
  name   VARCHAR2(50),
  salary NUMBER(10,2)
);

-- 4. 移除舊欄位、重命名
ALTER TABLE staff SET UNUSED COLUMN old_flag;
ALTER TABLE staff RENAME COLUMN id TO staff_id;

-- 5. 維護窗口回收空間
ALTER TABLE staff DROP UNUSED COLUMNS;

-- 6. 記錄變更說明
COMMENT ON TABLE staff IS '員工主檔 v2.1 2024-01-15 新增薪資欄位';
COMMENT ON COLUMN staff.salary IS '月薪,單位:元,含本薪+津貼';

八、 關鍵限制速查表

九、 最佳實務建議

  1. 變更前必備份(Expdp/備份表 CREATE TABLE t_bak AS SELECT * FROM t)
  2. 2. 生產環境在維護窗口執行,評估鎖表時間 3. 大表刪欄位優先 SET UNUSED,離峰 DROP UNUSED COLUMNS 4. 型別轉換建立中間欄位 → 資料遷移 → 切換 → 清理,避免長時間鎖定 5. 註解同步納入變更管理流程,便利後續文件產出

熟練掌握上述語法與限制,能讓表結構演進過程可控、低風險、可追溯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
操作鎖模式空間釋放版本支援
ADD (無 DEFAULT/NOT NULL)Exclusive DDL無所有版本
ADD (DEFAULT + NOT NULL)Exclusive DDL (瞬間)無11gR2+
MODIFY (擴大)Exclusive DDL無所有版本
MODIFY (縮小/型別轉換)Exclusive DDL (全表驗證)無所有版本
DROP COLUMNExclusive DDL (全表重組)立即8i+
SET UNUSEDExclusive DDL (瞬間)延遲8i+
RENAME COLUMNExclusive DDL無10g+