SQL课件--九、数据完整性

上传人:jiups****uk12 文档编号:45507305 上传时间:2018-06-17 格式:PPT 页数:57 大小:586KB
返回 下载 相关 举报
SQL课件--九、数据完整性_第1页
第1页 / 共57页
SQL课件--九、数据完整性_第2页
第2页 / 共57页
SQL课件--九、数据完整性_第3页
第3页 / 共57页
SQL课件--九、数据完整性_第4页
第4页 / 共57页
SQL课件--九、数据完整性_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《SQL课件--九、数据完整性》由会员分享,可在线阅读,更多相关《SQL课件--九、数据完整性(57页珍藏版)》请在金锄头文库上搜索。

1、第九章 数据完整性教学目标 数据完整性概述 学会使用约束来实施数据完整性保护 掌握使用规则来实现数据完整性保护 重点:PRIMARY KEY 、UNIQUE规则的创建与使用默认值的创建与使用 难点:绑定与松绑重点和难点数据库完整性 数据库的完整性 数据的正确性和相容性 数据的完整性和安全性是两个不同概念 数据的完整性防止数据库中存在不符合语义的数据,也就是防止数据库 中存在不正确的数据防范对象:不合语义的、不正确的数据 数据的安全性保护数据库防止恶意的破坏和非法的存取防范对象:非法用户和非法操作数据库完整性的形式实体完整性参照完整性用户定义的完整性属性上的约束条件的定义规则与默认值defaul

2、t实体完整性定义 关系模型的实体完整性 CREATE TABLE中用PRIMARY KEY定义 单属性构成的码有两种说明方法 定义为列级约束条件 定义为表级约束条件 对多个属性构成的码只有一种说明方法 定义为表级约束条件 实体完整性定义(续)(1)在列级定义主码CREATE TABLE Student(Sno CHAR(9) PRIMARY KEY,Sname CHAR(20) NOT NULL, Ssex CHAR(2) ,Sage SMALLINT,Sdept CHAR(20);例1 将Student表中的Sno属性定义为码实体完整性定义(续)(2)在表级定义主码CREATE TABLE

3、Student(Sno CHAR(9), Sname CHAR(20) NOT NULL,Ssex CHAR(2) ,Sage SMALLINT,Sdept CHAR(20), CONSTRAINT PK_Sno PRIMARY KEY (Sno); 实体完整性定义(续)CREATE TABLE SC(Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT,PRIMARY KEY (Sno,Cno) /*只能在表级定义主码*/); 例2将SC表中的Sno,Cno属性组定义为码实体完整性检查插入或对主码列进行更新操作时,RDBMS按照

4、实体完整性规则自动进行检查。包括: 检查主码值是否唯一,如果不唯一则拒绝插入或修改 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改实体完整性检查 (续)检查记录中主码值是否唯一的一种方法是进行全表扫描参照完整性定义 关系模型的参照完整性定义 在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码 用REFERENCES短语指明这些外码参照哪些表的主码 参照完整性定义(续)例3 定义SC中的参照完整性CREATE TABLE SC(Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT,PRIMARY K

5、EY (Sno, Cno), /*在表级定义实体完整性*/FOREIGN KEY (Sno) REFERENCES Student(Sno), /*在表级定义参照完整性*/FOREIGN KEY (Cno) REFERENCES Course(Cno) /*在表级定义参照完整性*/);例如,关系SC中一个元组表示一个学生选修的某门课程的 成绩,(Sno,Cno)是主码。Sno,Cno分别参照引用 Student表的主码和Course表的主码用户定义的完整性 用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求 RDBMS提供,而不必由应用程序承担属性上的约束条件的定义 CREATE T

6、ABLE时定义 列值非空(NOT NULL) 列值唯一(UNIQUE) 检查列值是否满足一个布尔表达式(CHECK)属性上的约束条件的定义(续) 不允许取空值 例5 在定义SC表时,说明Sno、Cno、Grade属性不允许取空值。CREATE TABLE SC(Sno CHAR(9) NOT NULL,Cno CHAR(4) NOT NULL,Grade SMALLINT NOT NULL,PRIMARY KEY (Sno, Cno), /* 如果在表级定义实体完整性,隐含了Sno,Cno不允许取空值,则在列 级不允许取空值的定义就不必写了 * /); 属性上的约束条件的定义(续) 列值唯一

7、例6 建立部门表DEPT,要求部门名称Dname列取值唯一,部门编 号Deptno列为主码CREATE TABLE DEPT(Deptno NUMERIC(2),Dname CHAR(9) UNIQUE,/*要求Dname列值唯一*/Location CHAR(10),PRIMARY KEY (Deptno);属性上的约束条件的定义(续) 用CHECK短语指定列值应该满足的条件例7 Student表的Ssex只允许取“男”或“女”。CREATE TABLE Student(Sno CHAR(9) PRIMARY KEY,Sname CHAR(8) NOT NULL, Ssex CHAR(2)

8、CHECK (Ssex IN (男,女) ) , /*性别属性Ssex只允许取男或女 */Sage SMALLINT,Sdept CHAR(20);属性上的约束条件检查和违约处理 插入元组或修改属性的值时,RDBMS检查属性上的约束条件是否被满足 如果不满足则操作被拒绝执行 元组上的约束条件的定义在CREATE TABLE时可以用CHECK短语定义元组上的约束条件,即元组级的限制同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件 元组上的约束条件的定义(续)CREATE TABLE Student(Sno CHAR(9), Sname CHAR(8) NOT NULL,Ss

9、ex CHAR(2),Sage SMALLINT,Sdept CHAR(20),PRIMARY KEY (Sno),CHECK (Ssex=女 OR Sname NOT LIKE Ms.%)/*定义了元组中Sname和 Ssex两个属性值之间的约束条件*/); 性别是女性的元组都能通过该项检查,因为Ssex=女成 立; 当性别是男性时,要通过检查则名字一定不能以Ms.打头例9 当学生的性别是男时,其名字不能以Ms.打头。元组上的约束条件检查插入元组或修改属性的值时,RDBMS检查元组上的约束条件是否被满足如果不满足则操作被拒绝执行 5.4 完整性约束命名子句 CONSTRAINT 约束CONS

10、TRAINT PRIMARY KEY短语 | FOREIGN KEY短语 | CHECK短语 完整性约束命名子句(续)CREATE TABLE Student(Sno NUMERIC(6)CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999),Sname CHAR(20) CONSTRAINT C2 NOT NULL,Sage NUMERIC(3)CONSTRAINT C3 CHECK (Sage = 1980-01-01 and hire_date = 1980-01-01 and hire_date = getdate()规则的绑定与松绑1.规则

11、规则 的绑绑定存储过储过 程Sp_bindrule 可以绑绑定一个规则规则 到表的一个列或一 个用户户自定义义数据类类型上其语语法如下:sp_bindrule rulename = rule,objname = object_name, futureonly各参数说说明如下rulename = rule -指定规则规则 名称objname = object_name - 指定规则绑规则绑 定的对对象futureonly -此选项仅选项仅 在绑绑定规则规则 到用户户自定 义义数据类类型上时时才可以使用.当指定此选项时仅选项时仅 以后使用此用户户自定 义义数据类类型的列会应应用新规则规则 而当前已

12、经经使用此数据类类型的列则则不受 影响.例: 绑绑定规则规则 hire_date_rule 到用户户自定义义数据类类型hire_date 上去.exec sp_bindrule hire_date_rule, hire_date运行结结果如下:Rule bound to data type.The new rule has been bound to column(s) of the specified user data type.规则的松绑存储过储过 程Sp_unbindrule 可解除规则规则 与列或用户户自定义义数据类类型的绑绑定. 其语语法如下sp_unbindrule objnam

13、e = object_name,futureonly其中futureonly选项选项 同绑绑定时时一样仅样仅 用于用户户自定义义数据类类型它指定 现现有的用此用户户自定义义数据类类型定义义的列仍然保持与此规则规则 的绑绑定如果不指定此项项 所有由此用户户自定义义数据类类型定义义的列也将随之解除与此规则规则 的绑绑定例:解除规则规则 hire_date_rule 与用户户自定义义数据类类型birthday 的 绑绑定带带futureonly选项选项exec sp_unbindrule birthday, futureonly运行结结果如下:(1 row(s) affected)Rule unbo

14、und from data type.规则绑定到用户的 自定义类型规则绑定 到表的列规则的删除可以在企业管理器 中选择规则单击选择规则单击 右键键从快捷菜单单中选择选择 delete 选项选项可使用drop rule 命令删删除当前数据库库中的一个或多个规则规则 其语语法如下drop rule rule_name ,.n缺省值default是往用户输户输 入记录时记录时 没有指定具体数据的列中自动动插入的数据缺省值对值对 象,与alter table 或create table 命令操作表时时用default 选项选项 指定的缺省值值 功能相似,但缺省值对值对 象可以用于多个列或用户户自定义义

15、数据类类型.它的管理与应应用同规则规则 有许许多相似之处处,表的一列或一个用户户自定义义数据类类型也只能与一个缺省值值相绑绑定.创建缺省值create default 命令用于在当前数据库库中创创建缺省值对值对 象, 其语语法如下:create default default_nameas constant_expression其中constant_expression 子句是缺省值值的定义义 constant_expression 子句可以是数学表达式或函数,也可以包含表的列名或其它数据库对库对 象.例1: 创创建生日缺省值值birthday_defacreate default birthday_defa as 1978-1-1例2: 创创建姓名缺省值值name_defacreate default name_defa as user用企业管理器创建缺省值查看缺省值用存储过程Sp_helptext 查看缺省值使用Sp_helptext 存储过储过 程可以查查看缺省值值的细节细节 例: 查查看缺省值值todayexec sp_helptext to

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

当前位置:首页 > 行业资料 > 其它行业文档

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