首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 9i TRUNCATE 表實戰:父子表外鍵約束阻塞與禁用約束解決方案

     編輯:Oracle 資料庫相關知識

TRUNCATE 語法

TRUNCATE TABLE 用戶名.表名 [DROP|REUSE STORAGE];
  • DROP STORAGE (默認):釋放數據/索引段空間,High Water Mark 重置
  • REUSE STORAGE:保留空間分配,僅清空數據

實戰場景:截斷父表 director

  1. 直接執行 TRUNCATE TABLE scott.director DROP STORAGE; → 報錯 ORA-02266,因子表 student 存在啟用的外鍵引用。
  2. 解決:禁用子表外鍵約束
    ALTER TABLE scott.student DISABLE CONSTRAINT "導師編號外鍵";
  3. 再次執行 TRUNCATE → 成功
  4. 業務完成後重新啟用外鍵:ALTER TABLE scott.student ENABLE CONSTRAINT "導師編號外鍵";

關鍵截圖:

TRUNCATE vs DELETE 核心差異

維度TRUNCATEDELETE
速度極快 (僅重置 HWM)慢 (逐行產生 REDO/UNDO)
回滾不可回滾 (隱式 COMMIT)可回滾
觸發器不觸發觸發 ROW/STATEMENT 觸發器
高水位線重置不變
外鍵約束父表被引用時不可執行可執行 (檢查完整性)
空間回收可選 DROP/REUSE STORAGE不釋放空間

注意事項

  • TRUNCATE 是 DDL,隱式提交前後事務,謹慎在事務中使用。
  • 禁用約束期間數據完整性由應用層保證,操作窗口越短越好。
  • 分區表可 TRUNCATE PARTITION 單獨清空分區。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved