Oracle在CREATE TABLE語(yǔ)句中提供了PRIMARY KEY子句,供用戶(hù)在建表時(shí)指定關(guān)系的主碼列。例如,在學(xué)生-選課數(shù)據(jù)庫(kù)中,要定義Student表的Sno為主碼,可使用如下語(yǔ)句: CREATE TABLE student
(sno NUMBER(8),
sanme VARCHAR(20),
sage NUMBER(20),
CONSTRAINT pk_sno PRIMARY KEY(sno));
其中,PRIMARY KEY(Sno)表示是Student表的主碼。PK_SNO是此主碼約束名。
若要在SC表中定義(Sno,Cno)為主碼,則用下面語(yǔ)句建立SC表: CREATE TABLE sc
(sno NUMBER(8),
cno NUMBER(2),
grade NUMBER(2),
CONSTRAINT pk_sc PRIMARY KEY(sno,cno));
用PRIMARY KEY語(yǔ)句定義了關(guān)系的主碼后,每當(dāng)用戶(hù)程序?qū)χ鞔a列進(jìn)行更新操作時(shí),系統(tǒng)自動(dòng)進(jìn)行完整性檢查,凡操作使主碼值為空或使主碼值在表中不,系統(tǒng)拒絕此操作,從而保證了實(shí)體完整性。
二、Oracle中的參照完整性
Oracle的CREATE TABLE語(yǔ)句也可以定義參照完整性規(guī)則,即用FOREIGN KEY子句定義哪些列為外碼列,用REFERENCES子句指明這些外碼相應(yīng)于哪個(gè)表的主碼,用ON DELETE CASCADE子句指明在刪除被參照關(guān)系的元組時(shí),同時(shí)刪除參照關(guān)系中相應(yīng)的遠(yuǎn)祖。
例如,使用如下SQL語(yǔ)句建立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為外碼,它相應(yīng)于DEPT表中的主碼Deptno。當(dāng)刪除或修改DEPT表中某個(gè)元組的主碼時(shí)要檢查EMP中是否有元組的DEPTNO值等于DEPT中要?jiǎng)h除的元組的Deptno值,如沒(méi)有,接受此操作;否則系統(tǒng)拒絕這一更新操作。
如果用如下SQL語(yǔ)句建立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);
當(dāng)要修改DEPT表中的Deptno值時(shí),先要檢查EMP表中有無(wú)元組的Deptno值與之對(duì)應(yīng),若沒(méi)有,系統(tǒng)接受這個(gè)修改操作,否則,系統(tǒng)拒絕此操作。
當(dāng)要?jiǎng)h除DEPT表中某個(gè)元組時(shí),系統(tǒng)也要檢查EMP表,若找到相應(yīng)元組則將它們也隨之刪除。
(sno NUMBER(8),
sanme VARCHAR(20),
sage NUMBER(20),
CONSTRAINT pk_sno PRIMARY KEY(sno));
其中,PRIMARY KEY(Sno)表示是Student表的主碼。PK_SNO是此主碼約束名。
若要在SC表中定義(Sno,Cno)為主碼,則用下面語(yǔ)句建立SC表: CREATE TABLE sc
(sno NUMBER(8),
cno NUMBER(2),
grade NUMBER(2),
CONSTRAINT pk_sc PRIMARY KEY(sno,cno));
用PRIMARY KEY語(yǔ)句定義了關(guān)系的主碼后,每當(dāng)用戶(hù)程序?qū)χ鞔a列進(jìn)行更新操作時(shí),系統(tǒng)自動(dòng)進(jìn)行完整性檢查,凡操作使主碼值為空或使主碼值在表中不,系統(tǒng)拒絕此操作,從而保證了實(shí)體完整性。
二、Oracle中的參照完整性
Oracle的CREATE TABLE語(yǔ)句也可以定義參照完整性規(guī)則,即用FOREIGN KEY子句定義哪些列為外碼列,用REFERENCES子句指明這些外碼相應(yīng)于哪個(gè)表的主碼,用ON DELETE CASCADE子句指明在刪除被參照關(guān)系的元組時(shí),同時(shí)刪除參照關(guān)系中相應(yīng)的遠(yuǎn)祖。
例如,使用如下SQL語(yǔ)句建立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為外碼,它相應(yīng)于DEPT表中的主碼Deptno。當(dāng)刪除或修改DEPT表中某個(gè)元組的主碼時(shí)要檢查EMP中是否有元組的DEPTNO值等于DEPT中要?jiǎng)h除的元組的Deptno值,如沒(méi)有,接受此操作;否則系統(tǒng)拒絕這一更新操作。
如果用如下SQL語(yǔ)句建立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);
當(dāng)要修改DEPT表中的Deptno值時(shí),先要檢查EMP表中有無(wú)元組的Deptno值與之對(duì)應(yīng),若沒(méi)有,系統(tǒng)接受這個(gè)修改操作,否則,系統(tǒng)拒絕此操作。
當(dāng)要?jiǎng)h除DEPT表中某個(gè)元組時(shí),系統(tǒng)也要檢查EMP表,若找到相應(yīng)元組則將它們也隨之刪除。