数据库系统教程 教学课件 ppt 作者 何玉洁 李宝安 第8章 数据完整性约束

上传人:E**** 文档编号:89375521 上传时间:2019-05-24 格式:PPT 页数:50 大小:1.54MB
返回 下载 相关 举报
数据库系统教程 教学课件 ppt 作者  何玉洁 李宝安 第8章 数据完整性约束_第1页
第1页 / 共50页
数据库系统教程 教学课件 ppt 作者  何玉洁 李宝安 第8章 数据完整性约束_第2页
第2页 / 共50页
数据库系统教程 教学课件 ppt 作者  何玉洁 李宝安 第8章 数据完整性约束_第3页
第3页 / 共50页
数据库系统教程 教学课件 ppt 作者  何玉洁 李宝安 第8章 数据完整性约束_第4页
第4页 / 共50页
数据库系统教程 教学课件 ppt 作者  何玉洁 李宝安 第8章 数据完整性约束_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《数据库系统教程 教学课件 ppt 作者 何玉洁 李宝安 第8章 数据完整性约束》由会员分享,可在线阅读,更多相关《数据库系统教程 教学课件 ppt 作者 何玉洁 李宝安 第8章 数据完整性约束(50页珍藏版)》请在金锄头文库上搜索。

1、数据库系统教程,第8章 数据完整性约束,1,第8章 数据完整性约束,8.1 数据完整性的概念 8.2 实现数据完整性 8.3 系统对完整性约束的检查 8.4 删除约束 8.5 触发器,2019年5月24日7时38分,2,8.1 数据完整性的概念,数据完整性是指数据的正确性和相容性。如: 每个人的身份证号必须是唯一的, 人的性别只能是男或女。 为了维护数据的完整性,DBMS必须要提供一种机制来检查数据库中的数据。 这些加在数据库数据之上的语义约束条件就称为数据完整性约束条件。 DBMS中检查数据是否满足完整性条件的机制就称为完整性检查。,2019年5月24日7时38分,3,完整性约束条件的作用对

2、象,列级约束 元组约束 关系约束,2019年5月24日7时38分,4,列级约束,主要是对列的类型、取值范围、精度等的约束,包括: 对数据类型的约束:数据类型、长度、精度等 例:sno char(8) 对数据格式的约束: Sno:201001101年专业班号序列号 对取值范围的约束:如学生的成绩取值范围为0100。 对空值的约束:列是否允许有空值。,2019年5月24日7时38分,5,元组约束,元组约束是元组中各个字段之间的联系的约束,如: 开始日期小于结束日期 订货数量小于等于库存数量 最低工资不能低于规定的最低值,2019年5月24日7时38分,6,关系约束,是指若干元组之间、关系之间的联系

3、的约束。比如: 学号的取值不能重复也不能取空值 学生修课表中学号的取值受学生表中学号取值的限制等。,2019年5月24日7时38分,7,实现数据完整性的方法,可以在服务器端完成,也可以在客户端编程实现。 在服务器端实现数据完整性的方法主要有两种: 声明数据完整性 触发器 在客户端实现数据完整性主要是用前端开发工具,在应用程序中编写代码保证。,2019年5月24日7时38分,8,8.2 实现数据完整性,设有如下两张表: CREATE TABLE 职工表( 职工编号 CHAR(7) NOT NULL, 职工名 CHAR(10)NOT NULL, 工作编号 CHAR(8), 工资 SMALLINT,

4、 电话 CHAR(8), 身份证号 CHAR(18) ),2019年5月24日7时38分,9,CREATE TABLE 工作表( 工作编号 CHAR(8) NOT NULL, 最低工资 SMALLINT, 最高工资 SMALLINT ),1.实体完整性约束,实体完整性是用PRIMARY KEY来保证。注意: 每个表只能有一个PRIMARY KEY约束; 用PRIMARY KEY约束的列的取值必须是不重复的(对由多列构成的主键,是这些主键列组合起来取值不重),并且不允许有空值。,2019年5月24日7时38分,10,添加主键约束,ALTER TABLE 表名 ADD CONSTRAINT 约束名

5、 PRIMARY KEY ( , n ),2019年5月24日7时38分,11,示例,ALTER TABLE 职工表 ADD CONSTRAINT PK_EMP PRIMARY KEY (职工编号) ALTER TABLE 工作表 ADD CONSTRAINT PK_JOB PRIMARY KEY (工作编号),2019年5月24日7时38分,12,2. 唯一值约束,用UNIQUE约束实现,用于限制一个列或者是多个列的组合取值不重复。 用在事实上具有唯一性的属性列上,比如身份证号码、驾驶证号码等。注意: 有UNIQUE约束的列允许有一个空值; 在一个表中可以定义多个UNIQUE约束; 可以在一

6、个列或多个列上定义UNIQUE约束;,2019年5月24日7时38分,13,在创建表时定义UNIQUE约束,CREATE TABLE 表名( 列名 类型 CONSTRAINT 约束名 UNIQUE( , n), ) 或者: CREATE TABLE 表名( 列名 类型, CONSTRAINT 约束名 UNIQUE(, n) ),2019年5月24日7时38分,14,添加UNIQUE约束,ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE( , n ),2019年5月24日7时38分,15,示例创建表时定义,例2.为 “身份证号”列添加唯一值约束。 CREATE T

7、ABLE 职工表( 身份证号 CHAR(19) UNIQUE, ) 或: CREATE TABLE 职工表( 身份证号 CHAR(19), UNIQUE(身份证号), ),2019年5月24日7时38分,16,示例添加约束,ALTER TABLE 职工表 ADD CONSTRAINT UN_EMP UNIQUE (身份证号),2019年5月24日7时38分,17,复合唯一约束示例,例3.设authors表,其中有au_fname和au_lname两个列,现要限制这两个列组合起来不重复。 CREATE TABLE authors ( au_fname VARCHAR(20), au_lname

8、VARCHAR(20) UNIQUE(au_fname, au_lname), -作为列级约束定义 ),2019年5月24日7时38分,18,复合唯一约束示例,CREATE TABLE authors ( au_fname VARCHAR(20), au_lname VARCHAR(20) , UNIQUE(au_fname, au_lname), -作为表级约束定义 ),19,2019年5月24日7时38分,复合唯一约束示例,在已创建好的表上添加唯一值约束: ALTER TABLE authors ADD CONSTRAINT UN_Name UNIQUE (au_fname, au_lna

9、me),2019年5月24日7时38分,20,3. 参照完整性,参照完整性(引用完整性)用FOREIGN KEY约束保证. 定义FOREIGN KEY约束时要注意: 外键列引用的列必须是有PRIMARY KEY约束或UNIQUE约束的列,通常是有PRIMARY KEY约束的列。,2019年5月24日7时38分,21,添加外键约束,ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY ()REFERENCES 引用表名() ON DELETE CASCADE | NO ACTION ON UPDATE CASCADE | NO ACTION ON DELET

10、E:级联或限制删除; ON UPDATE:级联或限制更新。,2019年5月24日7时38分,22,删除示例,2019年5月24日7时38分,23,ON DELETE CASCADE,ON DELETE NO ACTION,x,更新示例,2019年5月24日7时38分,24,ON UPDATE CASCADE,ON UPDATE NO ACTION,x,示例,例4 为职工表的“工作编号”列添加外键约束,此列引用工作表中的“工作编号”列。 ALTER TABLE 职工表 ADD CONSTRAINT FK_job_id FOREIGN KEY( 工作编号 ) REFERENCES 工作表 ( 工作

11、编号 ),2019年5月24日7时38分,25,4. 默认值约束,用DEFAULT约束实现,用于提供列的默认值。注意: 只在向表中插入数据时才检查DEFAULT约束; 每个列只能有一个DEFAULT约束。,2019年5月24日7时38分,26,定义或添加默认值约束,CREATE TABLE 表名( 列名 类型 CONSTRAINT 约束名 DEFAULT 常量表达式, ) ALTER TABLE 表名 ADD CONSTRAINT 约束名 DEFAULT 常量表达式 FOR 列名,2019年5月24日7时38分,27,示例,例5 在职工表中,如果某个职工没有电话,则写入默认值:11111111

12、。 CREATE TABLE 职工表( 电话 CHAR(8) DEFAULT 11111111 , ) 或: ALTER TABLE 职工表 ADD CONSTRAINT DF_PHONE DEFAULT 11111111 FOR 电话,2019年5月24日7时38分,28,5. 列取值范围约束,用CHECK约束实现,用于限制列的取值在指定范围内,即约束列的取值符合应用语义,如: 人的性别只能是“男”或“女”, 工资必须大于1000。 使用CHECK约束时注意: 在执行INSERT语句和UPDATE语句时系统自动检查CHECK约束; CHECK约束可以限制一个列的取值范围,也可以限制同表多列之

13、间的取值约束关系。,2019年5月24日7时38分,29,定义或添加CHECK约束,CREATE TABLE 表名( 列名 类型 CONSTRAINT 约束名 CHECK(逻辑表达式), ) 或: ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK (逻辑表达式),2019年5月24日7时38分,30,示例定义CHECK约束,例6 为职工表定义工资必须大于等于1000的约束。 CREATE TABLE 职工表 ( 工资 SMALLINT CHECK ( 工资 = 1000 ), ) 或者: CREATE TABLE 职工表 ( 工资 SMALLINT, CHECK

14、( 工资 = 1000 ) , ),2019年5月24日7时38分,31,示例添加CHECK约束,ALTER TABLE 职工表 ADD CONSTRAINT CHK_Salary CHECK ( 工资 = 1000 ),2019年5月24日7时38分,32,示例:定义多列取值约束,例7 限制“最低工资”=“最高工资”。 CREATE TABLE 工作表( 最低工资 int, 最高工资 int, CHECK(最低工资 = 最高工资), ) 注意:多列之间的CHECK约束只能定义在表级约束处。,2019年5月24日7时38分,33,示例:添加多列取值约束,ALTER TABLE 工作表 ADD

15、CONSTRAINT CHK_Job_Salary CHECK ( 最低工资 = 最高工资 ),2019年5月24日7时38分,34,示例,例8 限制电话号码列的每一位的取值必须是09之间的数字。 CHECK(电话 LIKE 0-90-90-9 0-90-90-90-90-9) ,2019年5月24日7时38分,35,8.3 系统对完整性约束的检查,主键约束:插入和更新数据时,检查新数据的主键值是否与已存在的主键值重复,或者新主键值是否为空。 唯一值约束:同主键约束。 默认值约束:插入数据且没有为某个列提供值时检查。 列取值范围约束:插入和修改有列取值约束的数据检查。,2019年5月24日7时

16、38分,36,外键约束的检查对子表,插入数据时,检查新数据的外键值是否在主表的主键值范围内。 修改外键列值时,检查修改后的外键值是否在主表的主键值范围内。,2019年5月24日7时38分,37,外键约束的检查对主表,删除数据时,检查被删除数据的主键值是否在子表中有对它的引用,若无,则删除之;若有,则看是否允许级联删除: 若允许:则将子表中相应数据一起删掉; 若不允许:则删除失败。 更改主键列值时,检查被更改的主键值是否在子表中有对它的引用,若无,则更改之;若有,则看是否允许级联更改: 若允许:则将子表中相应数据一起进行更改; 若不允许:则更改失败。,2019年5月24日7时38分,38,8.4 删除约束,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号