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

Oracle 9i 約束條件實戰:CHECK 約束創建、測試與錯誤處理演示

     編輯:Oracle 資料庫相關知識

五大約束類型回顧

類型關鍵字作用
主鍵PRIMARY KEY唯一標識行,非空+唯一
唯一UNIQUE列值唯一,允許單個 NULL
外鍵FOREIGN KEY引用父表主鍵/唯一鍵
非空NOT NULL列不可為 NULL
檢查CHECK自定義布爾表達式驗證數據

EM 創建 CHECK 約束

  1. 編輯表 → 「約束條件」頁籤 → 「添加」→ 選擇 CHECK
  2. 名稱:研究生編號檢查約束條件
  3. 條件:student_id >= 20020101 AND student_id <= 20030909
  4. 生成 SQL:
ALTER TABLE "SCOTT"."STUDENT"
ADD (CONSTRAINT "研究生編號檢查約束條件"
     CHECK (student_id >= 20020101 AND student_id <= 20030909));

腳本 createcheck.sql,截圖:

測試約束生效

嘗試插入 STUDENT_ID = 20010101 (超出下限) 的記錄:

INSERT INTO "SCOTT"."STUDENT"
("STUDENT_ID","NAME","PROFESSIONAL","BIRTHDAY","DIRECTOR_ID")
VALUES (20010101,'紀曉芙','軟件工程',
        TO_DATE('15-7月-1971','dd-Mon-yyyy HH:MI:SS AM'),200201);

報錯:ORA-02290: check constraint (SCOTT.研究生編號檢查約束條件) violated。截圖:

最佳實踐

  • 命名規範:CK_表名_列名_業務含義,便於錯誤日誌定位。
  • 條件表達式勿包含子查詢、非確定性函數 (SYSDATE/UID)、跨表引用。
  • 批量導數據前可 DISABLE CONSTRAINT,導入後 ENABLE VALIDATE 或 ENABLE NOVALIDATE (僅驗證新數據)。
  • 結合 V$CONSTRAINT 監控約束狀態 (ENABLED/VALIDATED)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved