Oracle 数据库的完整性控制
Oracle 在 CREATE TABLE 语句中提供了 PRIMARY KEY 子句,供用户在建表时指定
关系的主码列。例如,在学生-选课数据库中,要定义 Student 表的 Sno 为主码,可使用
如下语句: 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)为主码,则用下面语句建立 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),
评论0