-
1 讲稿
-
2 习题
-
3 PPT
一、概念定义
(一)用户定义的完整性是:针对某一具体应用的数据必须满足的语义要求
(二)关系数据库管理系统提供了定义和检验用户定义完整性的机制,不必由应用程序承担
二、属性上的约束
(一)CREATE TABLE时定义属性上的约束条件
n列值非空(NOT NULL)
n列值唯一(UNIQUE)
n检查列值是否满足一个条件表达式(CHECK)
(1)不允许取空值
[例5.5] 在定义SC表时,说明Sno、Cno、Grade属性不允许取空值。
CREATE TABLE SC
( Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT NOTNULL,
PRIMARY KEY (Sno, Cno),
…
/* 如果在表级定义实体完整性,隐含了Sno,Cno不允许取空值,则在
列级不允许取空值的定义 可以不写 * /
);
(2)列值唯一
[例5.6]建立部门表DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码
CREATE TABLE DEPT
( Deptno NUMERIC(2),
Dname CHAR(9) UNIQUE NOT NULL,
/*要求Dname列值唯一, 并且不能取空值*/
Location CHAR(10),
PRIMARY KEY (Deptno)
);
(3)用CHECK短语指定列值应该满足的条件
[例5.7] Student表的Ssex只允许取“男”或“女”。
CREATE TABLE Student
( Sno CHAR(9) PRIMARY KEY,
Sname CHAR(8) NOT NULL,
Ssex CHAR(2) CHECK (Ssex IN (‘男’,’女’)),
/*性别属性Ssex只允许取'男'或'女' */
Sage SMALLINT,
Sdept CHAR(20)
);
[例5.8] SC表的Grade的值应该在0和100之间。
CREATE TABLE SC
( Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT CHECK(Grade>=0 AND Grade<=100), /*Grade取值范围是0到100*/
PRIMARY KEY (Sno,Cno),
FOREIGN KEY (Sno) REFERENCES Student(Sno),
FOREIGN KEY (Cno) REFERENCES Course(Cno)
);
(二)用户定义完整性检查和违约处理
n插入元组或修改属性的值时,关系数据库管理系统检查属性上的约束条件是否被满足
n如果不满足则操作被拒绝执行
[例5.9]当学生的性别是男时,其名字不能以Ms.打头。
CREATE TABLE Student
( Sno CHAR(9),
Sname CHAR(8) NOT NULL,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20),
PRIMARY KEY (Sno),
CHECK (Ssex='女' OR Sname NOT LIKE 'Ms.%')
/*定义了元组中Sname和 Ssex两个属性值之间的约束条件*/
);
Ø性别是女性的元组都能通过该项检查,因为Ssex=‘女’成立;
Ø当性别是男性时,要通过检查则名字一定不能以Ms.打头
三、元组上的约束条件检查和违约处理
n插入元组或修改属性的值时,关系数据库管理系统检查元组上的约束条件是否被满足
n如果不满足则操作被拒绝执行
四、完整性约束命名子句
1.完整性约束命名子句
CONSTRAINT <完整性约束条件名><完整性约束条件>
n<完整性约束条件>包括NOT NULL、UNIQUE、PRIMARY KEY短语、FOREIGN KEY短语、CHECK
短语等
[例5.10]建立学生登记表Student,要求学号在90000~99999之间,姓名不能取空值,年龄小于
30,性别只能是“男”或“女”。
CREATE TABLE Student
( Sno NUMERIC(6)
CONSTRAINTC1 CHECK (Sno BETWEEN 90000 AND 99999),
Sname CHAR(20)
CONSTRAINTC2 NOT NULL,
Sage NUMERIC(3)
CONSTRAINT C3 CHECK (Sage< 30),
Ssex CHAR(2)
CONSTRAINT C4 CHECK (Ssex IN ( ‘男’,'女')),
CONSTRAINT StudentKey PRIMARY KEY(Sno)
);
ü在Student表上建立了5个约束条件,包括主码约束(命名为StudentKey)以及C1、C2、C3、C4
四个列级约束。
2. 修改表中的完整性限制
n使用ALTER TABLE语句修改表中的完整性限制n
[例5.12]去掉例5.10Student表中对性别的限制。
ALTER TABLEStudent
DROPCONSTRAINT C4;
[例5.13] 修改表Student中的约束条件,要求学号改为在900000~999999之间,年龄由小于30改
为小于40
n可以先删除原来的约束条件,再增加新的约束条件
ALTERTABLE Student
DROP CONSTRAINT C1;
ALTERTABLE Student
ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999),
ALTERTABLE Student
DROP CONSTRAINT C3;
ALTERTABLE Student
ADD CONSTRAINT C3 CHECK(Sage < 40);

