第五章 数据库完整性
Sname VARCHAR(20) NOT NULL, Sage SMALLINT,
Ssex CHAR(2));
西南交通大学 《数据库原理及应用》第五章 第17页
5.3.1 属性上的约束条件的定义
2、列值唯一 例2:建立部门表DEPT,要求部门名称Dname列取
值唯一,部门编号Deptno列为主码。
Foreign Key (Cno) References Course(Cno))
西南交通大学 《数据库原理及应用》第五章 第8页
5.2.2 参照完整性检查和违约处理 参照完整性中,对被参照表和参照表进行增删改操 作时有可能破坏参照完整性,必须进行检查。
表5.1 可能破坏参照完整性的情况及违约处理
例4 :建立教师表TEACHER,要求教师的应发工资不超过 3000元。应发工资就是实发工资列Sal与扣除项Deduct之和。
CREATE TABLE TEACHER
(Eno CHAR(4), Ename VARCHAR(10),
Sal NUMERIC(7,2), Deduct NUMERIC(7,2),
5.4 完整性约束命名子句
SQL还在CREATE TABLE语句中提供了完整性约束命
名子句CONSTRAINT,用来对完整性约束条件命名,可 以灵活地增加、删除一个完整性约束条件。
1、完整性约束命名子句
CONSTRAINT<完整性约束条件名> [PRIMARY KEY短语|FOREIGN KEY短语|CHECK短语]
例3: 建立学生登记表Student,要求学号在 90000至 99999之间,性别只能是‘男’或‘女’。 CREATE TABLE Student
(Sno CHAR(5) CHECK (Sno BETWEEN 90000 AND 99999), Sname VARCHAR(20),
Sage SMALLINT, Ssex CHAR(2) CHECK (Ssex IN ('男', '女')))
Foreign Key (Cno) References Course(Cno)
On Delete No Action On Update Cascade)
西南交通大学 《数据库原理及应用》第五章 第14页
5.3 用户定义的完整性
用户定义的完整性就是针对某一具体应用的数据必须
满足的语义要求。
目前的RDBMS都提供了定义和检验这类完整性
西南交通大学
《数据库原理及应用》第五章
第19页
5.3.2 属性上的约束条件检查和违约处理 当往表中插入元组或修改属性的值时,RDBMS就检
查属性上的约束条件是否被满足,如果不满足则操作 被拒绝执行。
西南交通大学
《数据库原理及应用》第五章
第20页
5.3.3 元组上的约束条件的定义
与属性上约束条件的定义类似,create table中可用CHECK短 语定义元组上的约束条件。同属性值限制相比,元组级的限 制可以设置不同属性之间的取值的相互约束条件。
CHECK (Sal + Deduct <=3000))
西南交通大学 《数据库原理及应用》第五章 第21页
5.3.4 元组上的约束条件检查和违约处理 当往表中插入元组或修改属性的值时,RDBMS就检查
元组上的约束条件是否被满足,如果不满足则操作被 拒绝执行。
西南交通大学
《数据库原理及应用》第五章
第22页
ALTER TABLE Student
ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999)
西南交通大学 《数据库原理及应用》第五章 第25页
作业
P164
2、4、6题
西南交通大学
《数据库原理及应用》第五章
第26页
例6: 去掉[例5]student表中对性别的限制。 ALTER TABLE Student DROP CONSTRAINT C4 例7:修改[例5]student表中的约束条件,要求学号改为在900 000-999 999之间。 可以先删除原来的约束条件,再增加新的约束条件。
ALTER TABLE Student DROP CONSTRAINT C1 ;
第五章 数据库完整性
学习要求 掌握数据库完整性概念与数据库安全性概念 之间的区别与联系 掌握DBMS完整性控制机制 掌握SQL定义关系模式的完整性约束条件
西南交通大学
《数据库原理及应用》第五章
第1页
第五章 数据库完整性
• 什么是数据库的完整性 –数据的正确性和相容性 –防止不合语义的数据进入数据库。
值与被参照关系中要删除元组的主码值相同时,系
统才执行删除操作,否则拒绝此删除操作。
置空值删除:在删除被参照关系中的元组时,将
参照关系中相应元组的外码值置空值。
西南交通大学 《数据库原理及应用》第五章 第11页
5.2.2 参照完整性检查和违约处理 在最后一种策略中,需要考虑外码能否接受空值问题 根据实际情况的不同,一个关系的外码有时可以
被参照表(例如Student) 参照表(例如SC) 可能破坏参照完整性 可能破坏参照完整性 删除元组 修改主码值 插入元组 修改外码值 违约处理 拒绝 拒绝
可能破坏参照完整性 拒绝/级连删除/设置为空值 可能破坏参照完整性 拒绝/级连删除/设置为空值
西南交通大学
《数据库原理及应用》第五章
第9页
5.2.2 参照完整性检查和违约处理 当上述不一致发生时,系统可采用以下策略加以处理:
5.1 实体完整性
• 关系模型的实体完整性在CREATE TABLE语句中
提供了PRIMARY KEY子句,供用户在建表时指 定关系的主码列。
在列级使用PRIMARY KEY子句 在表级使用PRIMARY KEY子句
西南交通大学
《数据库原理及应用》第五章
第4页
5.1.1 实体完整性定义 例1 定义Student表的Sno属性为主码。
例: 学生的年龄必须是整数,取值范围为14--29; 学生的性别只能是男或女; 学生的学号一定是唯一的;
学生所在的系必须是学校开设的系;
– 完整性:是否真实地反映现实世界
西南交通大学 《数据库原理及应用》第五章 第2页
第五章 数据库完整性
完整性控制机制
1.完整性约束条件定义机制
完整性约束条件:数据模型的组成部分,约束数据库 中数据的语义
Sname VARCHAR(20) NOT NULL,
Sage SMALLINT,
Ssex CHAR(2) CONSTRAINT C4 CHECK (Ssex IN('男','女')))
西南交通大学
《数据库原理及应用》第五章
第24页
5.4 完整性约束命名子句
2、修改表中的完整性限制
使用ALTER TABLE语句修改表中BER,
Dname VARCHAR(9) UNIQUE, Location VARCHAR(10), PRIMARY KEY (Deptno))
西南交通大学 《数据库原理及应用》第五章 第18页
5.3.1 属性上的约束条件的定义 3、用CHECK短语指定列值应该满足的条件
• FOREIGN KEY子句:定义外码列 • REFERENCES子句:外码参照哪个表的主码
Create Table SC ( Sno char(9) , Cno char(4) ,
Grade smallint , Primary Key (Sno,Cno),
Foreign Key (Sno) References Student(Sno),
学生(学号,姓名,性别,专业号,年龄)
专业(专业号,专业名)
置空值删除:删除被参照关系专业中的主码值,同 时将参照关系学生中相应的外码值置为空值。
语义:某个专业删除了,该专业的所有学生专业未定, 等待重新分配专业。
西南交通大学 《数据库原理及应用》第五章 第13页
5.2 参照完整性 显式说明参照完整性的违约处理示例:
1、拒绝执行 不允许该操作执行。该策略一般设置为默认策略。
2、级连操作
删除或修改被参照表的一个元组造成与参照表的不一致, 则删除或修改参照表中的所有造成不一致的元组。 3、设置为空值
删除或修改被参照表的一个元组造成不一致,则将参照 表中所有造成不一致的元组的对应属性设置为空值。
西南交通大学 《数据库原理及应用》第五章 第10页
取空值,有时又不能取空值。
例1中, 在学生-选课数据库中,Student为被参照关 系,其主码为Sno。关系SC的外码Sno同时也是SC的主
码中的一个属性,所以其外码不能取空值。
西南交通大学
《数据库原理及应用》第五章
第12页
5.2.2 参照完整性检查和违约处理 例2 假设专业表中某个元组被删除,即删除了某个专 业号。
的机制,使用了和实体完整性、参照完整性相同
的技术和方法来处理它们,而不必由应用程序承 担这一功能。
西南交通大学
《数据库原理及应用》第五章
第15页
5.3.1 属性上的约束条件的定义 在create table中定义属性的同时可以根据应用要求, 定义属性上的约束条件,即属性值限制,包括:
列值非空(NOT NULL短语)
CREATE TABLE Student (Sno Char(9) PRIMARY KEY, Sname Char(20), Sage Smallint, Sdept Char(20)) 或: CREATE TABLE Student (Sno Char(9), Sname Char(20), Sage Smallint, Sdept Char(20), PRIMARY KEY(Sno))