(sno NUMBER(8),
sanme VARCHAR(20),
sage NUMBER(20),
CONSTRAINT pk_sno PRIMARY KEY(sno));
其中,PRIMARY KEY(Sno)表示是Student表的主碼。PK_SNO是此主碼約束名。
若要在SC表中定義(Sno,Cno)為主碼,則用下面語句建立SC表: CREATE TABLE sc
(sno NUMBER(8),
cno NUMBER(2),
grade NUMBER(2),
CONSTRAINT pk_sc PRIMARY KEY(sno,cno));
用PRIMARY KEY語句定義了關系的主碼后,每當用戶程序對主碼列進行更新操作時,系統自動進行完整性檢查,凡操作使主碼值為空或使主碼值在表中不唯一,系統拒絕此操作,從而保證了實體完整性。
二、Oracle中的參照完整性
Oracle的CREATE TABLE語句也可以定義參照完整性規則,即用FOREIGN KEY子句定義哪些列為外碼列,用REFERENCES子句指明這些外碼相應于哪個表的主碼,用ON DELETE CASCADE子句指明在刪除被參照關系的元組時,同時刪除參照關系中相應的遠祖。
例如,使用如下SQL語句建立EMP表: CREATE TABLE emp
(empno NUMBER(4),
ename VARCHAR(10),
job VARCHAR2(9),
mgr NUMBER(4),
sal NUMBER(7,2),
deptno NUMBER(2),
CONSTRAINT fk_deptno
FOREIGN KEY(deptno)
REFERENCES dept(deptno));
則表明EMP是參照表,DEPT為其被參照表,EMP表中Deptno為外碼,它相應于DEPT表中的主碼Deptno。當刪除或修改DEPT表中某個元組的主碼時要檢查EMP中是否有元組的DEPTNO值等于DEPT中要刪除的元組的Deptno值,如沒有,接受此操作;否則系統拒絕這一更新操作。
如果用如下SQL語句建立EMP表: CREATE TABLE emp
(empno NUMBER(4),
ename VARCHAR(10),
job VARCHAR2(9),
mgr NUMBER(4),
sal NUMBER(7,2),
deptno NUMBER(2),
CONSTRAINT fk_deptno
FOREIGN KEY(deptno)
REFERENCES dept(deptno)
ON DELETE CASCADE);
當要修改DEPT表中的Deptno值時,先要檢查EMP表中有無元組的Deptno值與之對應,若沒有,系統接受這個修改操作,否則,系統拒絕此操作。
當要刪除DEPT表中某個元組時,系統也要檢查EMP表,若找到相應元組則將它們也隨之刪除。
三、Oracle中用戶定義的完整性
除實體完整性和參照完整性外,應用系統中往往還需要定義與應用有關的完整性限制。例如:要求某一列的值不能取空值,要在表中是唯一的,要在某個取值范圍中等。Oracle允許用戶在建表時定義下列完整性約束:
列值非空(NOT NULL短語)
列值唯一(UNIQUE短語)
檢查列值是否滿足一個布爾表達式(CHECK短語)
文章來源于領測軟件測試網 http://www.kjueaiud.com/