实现数据完整性约束

上传人:wt****50 文档编号:49806046 上传时间:2018-08-03 格式:PPTX 页数:28 大小:96.52KB
返回 下载 相关 举报
实现数据完整性约束_第1页
第1页 / 共28页
实现数据完整性约束_第2页
第2页 / 共28页
实现数据完整性约束_第3页
第3页 / 共28页
实现数据完整性约束_第4页
第4页 / 共28页
实现数据完整性约束_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《实现数据完整性约束》由会员分享,可在线阅读,更多相关《实现数据完整性约束(28页珍藏版)》请在金锄头文库上搜索。

1、数据库技术与应用袁宝库 实现数据完整性约束o数据完整性基本概念 o实现声明完整性 o实现过程完整性 数据完整性基本概念o 数据的完整性是为了防止数据库中存在不符 合语义的数据。 o 这些加在数据库数据之上的语义约束条件就 是数据完整性约束条件。 o 这些约束条件作为表定义的一部分存储在数 据库中。 o DBMS检查数据是否满足完整性条件的机制就 称为完整性检查。 完整性约束条件的作用对象o 列级约束 n 对数据类型的约束 n 对数据格式的约束 n 对取值范围或取值集合的约束 n 对空值的约束 o 元组约束 n 元组中各个字段之间的联系的约束,如:开始日期 小于结束日期。 o 关系约束 n 是若

2、干元组之间、关系之间的联系的约束。 实现数据完整性的方法 o一种是在定义表时声明数据完整性 ,称为声明完整性, o另一种是在服务器端编写触发器来 实现,称为过程完整性。 o在执行对数据的增、删、改操作时 ,数据库管理系统自动检查用户定 义的完整性约束条件。 实现声明完整性 o 主码约束 n 每个表只能有一个PRIMARY KEY约束; n 用PRIMARY KEY约束的列取值不能有重复 ,而且不允许有空值; o 添加主码约束的语法格式: ALTER TABLE 表名ADD CONSTRAINT 约束名PRIMARY KEY ( , n ) 实现声明完整性 例:对雇员表和工作表添加主码约束 AL

3、TER TABLE 雇员表ADD CONSTRAINT PK_EMPPRIMARY KEY (雇员编号)ALTER TABLE 工作表ADD CONSTRAINT PK_JOBPRIMARY KEY (工作编号) UNIQUE约束 o 用于限制在一个列中不能有重复的值。 o 用在事实上具有惟一性的属性列上,比如每 个人的身份证号码、驾驶证号码等均不能有 重复值。 o 注意: n 允许有一个空值; n 在一个表中可以定义多个UNIQUE约束; n 可以在一个列或多个列上定义UNIQUE约束。 添加UNIQUE约束o 添加UNIQUE约束的语法格式为: ALTER TABLE 表名ADD CONS

4、TRAINT 约束名UNIQUE( , n ) o 例为雇员表的“电话”列添加UNIQUE约束。 ALTER TABLE 雇员表ADD CONSTRAINT UK_SIDUNIQUE(电话)外码约束o 实现引用完整性。 o 外码所引用的列必须是有PRIMARY KEY约 束或UNIQUE约束的列。 o 添加FOREIGN KEY约束的语法格式为: ALTER TABLE 表名ADD CONSTRAINT 约束名FOREIGN KEY()REFERENCES 引用表名()示例o例为雇员表的工作编号添加外码引 用约束。 ALTER TABLE 雇员ADD CONSTRAINT FK_job_idF

5、OREIGN KEY (工作编号) REFERENCES 工作表 (工作编号)DEFAULT约束o 用于提供列的默认值。 o 只有在向表中插入数据时才检查DEFAULT约束。 o 添加DEFAULT约束的语法格式为: ALTER TABLE 表名ADD CONSTRAINT 约束名 DEFAULT 默认值 FOR 列名 o 例定义雇员表的工资的默认值为1000。 ALTER TABLE 雇员ADD CONSTRAINT DF_SALARY DEFAULT 1000 FOR 工资 CHECK约束o 用于限制列的取值在指定的范围内,使数据库中存放的 值都是有意义的。 o 系统在执行INSERT语句

6、和UPDATE语句时自动检查 CHECK约束。 o CHECK约束可约束同一个表中多个列之间的取值关 系。 o 添加CHECK约束的语法格式为: ALTER TABLE 表名ADD CONSTRAINT 约束名 CHECK (逻辑表达式) 示例o 限制雇员的工资必须大于等于200。 ALTER TABLE 雇员ADD CONSTRAINT CHK_Salary CHECK ( 工资 = 200 ) o 限制工资表的最低工资小于等于最高工资。 ALTER TABLE 工作ADD CONSTRAINT CHK_Job_SalaryCHECK( 最低工资 = 最高工资 )BEGINPRINT 最低工

7、资必须小于最高工资ROLLBACKEND 示例o 创建实现限制雇员的工资必须在工作表的相应工 作的最低工资和最高工资之间。 CREATE TRIGGER tri_emp_salary ON 雇员表 FOR INSERT, UPDATE ASIF EXISTS (SELECT * FROM INSERTED a JOIN 工作表 b ON a.工作编号 = b.工作编号 WHERE 工资 NOT BETWEEN 最低工资 AND 最高工资 ) ROLLBACK 限制更新数据的触发器o 限制将SC表中不及格学生的成绩改为及格。 CREATE TRIGGER tri_gradeON SC FOR U

8、PDATEASIF UPDATE(Grade) IF EXISTS(SELECT * FROM INSERTED JOIN DELETED ON INSERTED.Sno = DELETED.SnoWHERE INSERTED.Grade = 60 AND DELETED.Grade 60)ROLLBACK限制删除的触发器o 限制删除SC表中成绩不及格学生的修课记录。 CREATE TRIGGER tri_del_gradeON SC FOR DELETEASIF EXISTS(SELECT * FROM DELETED WHERE Grade 60)ROLLBACK 修改触发器定义 o 语法格式为: ALTER TRIGGER 触发器名称 ON 表名 FOR | AFTER | INSTEAD OF INSERT , DELETE , UPDATE AS SQL 语句 . n 删除触发器o 语法格式为: DROP TRIGGER 触发器名 , . n o 例:删除tri_grade触发器。 DROP TRIGGER tri_grade

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

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