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

Oracle 表列修改全攻略:增刪改名、重命名表、添加註釋標準語法

     編輯:Oracle 資料庫基礎

DDL 操作分類與語法速查

1. 增加列

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

-- 示例
ALTER TABLE emp01 ADD eno NUMBER(4);

2. 修改列定義(數據類型、長度、預設值、NOT NULL)

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

-- 示例:擴大長度、設置預設值
ALTER TABLE emp01 MODIFY job VARCHAR2(15) DEFAULT 'CLERK';
  • 擴大長度/精度:隨時可執行。
  • 縮小長度:需確保現有數據符合新長度,否則報錯。
  • 修改類型:同類型族(數字/字符/日期)間可轉換,需數據兼容。
  • 添加 NOT NULL:列必須無 NULL 值。

3. 刪除列

-- 立即刪除(10g+),釋放空間
ALTER TABLE emp01 DROP COLUMN dno;

-- 標記未用(舊版/大表避免鎖表),稍後 DROP UNUSED COLUMNS
ALTER TABLE emp01 SET UNUSED COLUMN dno;
ALTER TABLE emp01 DROP UNUSED COLUMNS;

4. 重命名列

ALTER TABLE emp01 RENAME COLUMN eno TO empno;

5. 重命名表

RENAME emp01 TO employee;
-- 或
ALTER TABLE emp01 RENAME TO employee;

6. 添加註釋(數據字典元數據)

COMMENT ON TABLE employee IS '存放員工信息';
COMMENT ON COLUMN employee.name IS '員工姓名';
COMMENT ON COLUMN employee.sal IS '月薪,單位:元';

查詢註釋:

SELECT * FROM user_col_comments WHERE table_name = 'EMPLOYEE';
SELECT * FROM user_tab_comments WHERE table_name = 'EMPLOYEE';

進階場景與避坑指南

場景處理建議
大表 ADD COLUMN 有默認值11g+ 元數據級快速添加(不更新每行),極快。11g 前需全表更新,鎖表久,建議:
1) ADD 無默認值 → 2) 分批 UPDATE → 3) MODIFY DEFAULT
大表 MODIFY 列類型/長度可能觸發全表重組,鎖表時間長。建議:
1) 低峰期 → 2) DBMS_REDEFINITION 在線重定義 → 3) 或創建新表 CTAS + 重命名
DROP COLUMN 空間未釋放10g+ DROP COLUMN 會標記列刪除,空間標記為可用,但段大小不變。需 ALTER TABLE ... MOVE 或 SHRINK SPACE(啟用行移動)真正釋放。
RENAME 導致視圖/同義詞/觸發器失效重命名後需重新編譯依賴對象:EXEC DBMS_UTILITY.COMPILE_SCHEMA('SCOTT');
註釋中文亂碼確保客戶端 NLS_LANG 與數據庫字符集一致(如 AL32UTF8),SQL*Plus/工具編碼設置正確。

最佳實踐檢查清單

  1. 變更前:備份表結構 DBMS_METADATA.GET_DDL('TABLE','EMP01')、導出數據樣本。
  2. 變更中:監控鎖等待 v$session_wait、v$lock。
  3. 變更後:驗證數據完整性、重新收集統計信息 DBMS_STATS.GATHER_TABLE_STATS、重新編譯失效對象 UTL_RECOMP.RECOMP_SERIAL。
  4. 文檔化:更新數據字典、ER 圖、應用配置映射。

結語

Oracle 表列修改看似簡單,大表環境下每個動作都可能引發鎖爭用、空間碎片、依賴對象失效。掌握 ADD/MODIFY/DROP/RENAME 語法細節、版本差異(11g+ 默認值優化)、DBMS_REDEFINITION 在線重定義、SHRINK SPACE 空間回收,並建立「備份→驗證→統計→編譯」標準化流程,是 DBA 與開發協作的必修課。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved