例1 建立部門表DEPT,要求部門名稱Dname列取值唯一,部門編號Deptno列為主碼。 CREATE TABLE dept
(deptno NUMBER,
dname VARCHAR(9) CONSTRAINT u1 UNIQUE,
loc VARCHAR(10),
CONSTRAINT pk_dept PRIMARY KEY (deptno));
其中CONSTRAINT U1 UNIQUE表示約束名為U1,該約束要求Dname列值唯一。
例2 建立學生登記表Student,要求學號在90000~99999之間,年齡<29,性別只能是“男”或“女”,姓名非空。 CREATE TABLE student
(sno NUMBER(5) CONSTRAINT c1 CHECK (sno BETWEEN 90000 AND 99999),
sname VARCHAR(20) CONSTRAINT c2 NOT NULL,
sage NUMBER(3) CONSTRAINT c3 CHECK (sage<29),
ssex VARCHAR(2) CONSTRAINT c4 CHECK(ssex IN('男','女')));
例3 建立職工表EMP,要求每個職工的應發工資不得超過3000元。應發工資實際上就是實發工資列Sal與扣除項Deduct之和。 CREATE TABLE emp
(eno NUMBER(4),
ename VARCHAR(10),
job VARCHAR(8),
sal NUMBER(7,2),
deduct NUMBER(7,2),
deptno NUMBER(2),
CONSTRAINT c1 CHECK (sal + deduct <= 3000));
在Oracle中,除列值非空、列值唯一、檢查列值是否滿足一個布爾表達式外,用戶還可以通過觸發器(Trigger)來實現其他完整性規則。所謂數據庫觸發器,就是一類靠事件驅動的特殊過程,一旦由某個用戶定義,任何用戶對該數據的增、刪、改操作均由服務器自動激活相應的觸發器,在核心層進行集中的完整性控制。
定義數據庫觸發器的語句是CREATE TRIGGER。
例4 為教師表Teacher定義完整性規則“教授的工資不得低于1000元,如果低于1000元,自動改為1000元”。 CREATE TRIGGER update_sal
BEFORE INSERT OR UPDATE OF sal, pos
ON teacher
FOR EACH ROW
WHEN (:NEW.pos = '教授') /**//* 某教員晉升為教授 */
BEGIN
IF :NEW.sal < 1000
THEN
:NEW.sal := 1000;
END IF;
END;
綜上所述,Oracle提供了CREATE TABLE語句CREATE TRIGGER語句定義完整性約束條件,其中用CREATE TABLE語句可以定義很復雜的完整性約束條件。完整性約束條件一旦定義好,Oracle會自動執行相應的完整性檢查,對于違反完整性約束條件的操作或者拒絕執行或者執行事先定義的操作。
文章來源于領測軟件測試網 http://www.kjueaiud.com/