程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle數據庫數據對象分析(中)--(1)

Oracle數據庫數據對象分析(中)--(1)

編輯:Oracle數據庫基礎

完整性約束

  完整性約束用於增強數據的完整性,Oracle提供了5種完整性約束:

    Check
    NOT NULL
    Unique
    Primary
    Foreign key

  完整性約束是一種規則,不占用任何數據庫空間。完整性約束存在數據字典中,在執行SQL或PL/SQL期間使用。用戶可以指明約束是啟用的還是禁用的,當約束啟用時,他增強了數據的完整性,否則,則反之,但約束始終存在於數據字典中。

  禁用約束,使用ALTER語句

ALTER TABLE table_name DISABLE CONSTRAINT constraint_name;
  或

ALTER TABLE policIEs DISABLE CONSTRAINT chk_gender
  如果要重新啟用約束:

ALTER TABLE policIEs ENABLE CONSTRAINT chk_gender
  刪除約束

ALTER TABLE table_name DROP CONSTRAINT constraint_name
  或

ALTER TABLE policIEs DROP CONSTRAINT chk_gender;
  Check 約束

  在數據列上Check 約束需要 一個特殊的布爾條件或者將數據列設置成TRUE,至少一個數據列的值是NULL,Check約束用於增強表中數據內容的簡單的商業規則。用戶使用Check約束保證數據規則的一致性。Check約束可以涉及該行同屬Check約束的其他數據列但不能涉及其他行或其他表,或調用函數SYSDATE,UID,USER,USERENV。如果用戶的商業規則需要這類的數據檢查,那麼可以使用觸發器。Check約束不保護LOB數據類型的數據列和對象、嵌套表、VARRY、ref等。單一數據列可以有多個Check約束保護,一個Check約束可以保護多個數據列。

  創建表的Check約束使用CREATE TABLE語句,更改表的約束使用ALTER TABLE語句。

  語法:

CONSTRAINT [constraint_name] CHECK (condition);
  Check約束可以被創建或增加為一個表約束,當Check約束保護多個數據列時,必須使用表約束語法。約束名是可選的並且如果這個名字不存在,那麼Oracle將產生一個以SYS_開始的唯一的名字。

  例:

CREATE TABLE policIEs
(policy_id NUMBER,
holder_name VARCHAR2(40),
gender VARCHAR2(1) constraint chk_gender CHECK (gender in ('M','F'),
marital_status VARCHAR2(1),
date_of_birth DATE,
constraint chk_marital CHECK (marital_status in('S','M','D',

'W'))
);

  NOT NULL約束

  NOT NULL約束應用在單一的數據列上,並且他保護的數據列必須要有數據值。缺省狀況下,Oracle允許任何列都可以有NULL值。某些商業規則要求某數據列必須要有值,NOT NULL約束將確保該列的所有數據行都有值。

  例:

CREATE TABLE policIEs
(policy_id NUMBER,
holder_name VARCHAR2(40) NOT NULL,
gender VARCHAR2(1),
marital_status VARCHAR2(1),
date_of_birth DATE NOT NULL
);
  對於NOT NULL的ALTER TABLE語句與其他約束稍微有點不同。

ALTER TABLE policIEs MODIFY holder_name NOT NULL

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved