




已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第8章 数据库完整性,约束,8.1,默认值,8.2,规则,8.3,2,数据库的完整性,数据库的完整性是指数据的正确性、有效性和相容性,是为了防止数据库中存在不合语义的数据,防止错误信息的输入与输出造成无效操作或错误结果。完整性措施的防范对象是不合语义的数据。 例:性别只能是“男”或“女”,学号必须唯一。 系统提供多种强制数据完整性的机制,保证数据库中数据的质量。,3,数据完整性类型,根据数据完整性措施所作用的数据库对象和范围不同,可以将数据完整性进行分类。 完整性约束作用的对象: 关系(表):若干元组间,关系之间的联系的约束; 元组:元组中各个字段间的联系的约束; 列:列的类型、取值范围、精度、唯一性、为空性、默认定义、CHECK约束、主键约束、外键约束。 数据完整性约束分类: 实体(表)完整性 域(列)完整性 参照完整性(引用完整性) 用户自定义完整性,4,1、实体完整性,又称为行完整性。它把表中的每行都看作一个实体,要求所有行都具有唯一标识。实体完整性作用对象是列,强制表的标识符列或主键的完整性(在SQL Server中,可以通过建立PRIMARY KEY约束、UNIQUE约束、IDENTITY等措施来实施实体完整性)。 例如,对“客户信息表”,客户编号就可以作为主键,每个客户的编号能够惟一地确定该客户对应的记录信息,那么在输入数据时,则不能有相同客户编号的记录存在,通过对客户编号这一字段建立主键约束,可实现“客户信息表”的实体完整性。,5,2、域完整性,域完整性又称为列完整性。它要求表中指定列的数据具有正确的数据类型(通过定义数据类型)、数据格式(通过CHECK约束和规则实现)和有效的数据范围(通过FOREIGN KEY约束、 CHECK约束、NOT NULL、DEFAULT定义和规则实现)。 例如对于课程表“COURSE1”,学生的某门课程的学分应在10分以内,为了对学分这一数据项输入的数据进行限制,可以定义该表的学分字段的约束条件。,6,例1 定义“COURSE1”以及学分字段的约束条件 CREATE TABLE COURSE1 (课程号 CHAR(6) NOT NULL, 课程名 CHAR(18) NOT NULL UNIQUE, 学分 TINYINT CHECK(学分=0 and 学分=10), PRIMARY KEY(课程号),对列的约束,对表的约束,7,3、参照完整性,又称为引用完整性,它的作用对象是关系。它保证主表(被参照表)中的数据与从表(参照表)中数据的一致性。在SQL Server中,它通过主键约束PRIMARY KEY和外键FOREIGN KEY 约束、触发器等来实现。 在数据库管理系统中,保证数据库的完整性是非常重要的。参照完整性确保键值在所有表中一致。 在被参照的表中,当其主键值被其他表参照时,一般情况下该行记录既不能被删除,也不允许被改变。,8,4.用户自定义完整性,可以定义不属于其它完整性分类的特定业务规则,作用的对象可以是列、也可以是元组或关系。所有的完整性类型都支持用户自定义完整性,如通过CREATE TABLE 中所有列级和表级约束、存储过程和触发器等实现,9,8.1 约束,主键(PRIMARY KEY)约束 惟一性(UNIQUE)约束 检查(CHECK)约束 外部键(FOREIGN KEY)约束 为空性(NOT NULL)定义,10,8.1.1 主键约束,主键是表中的一列或一组列,它们的值可以唯一地标识表中的每一行。在创建和修改表时,可以定义主键约束。主键列的值不允许为空。 两种创建主键约束的方法 使用企业管理器创建主键约束 使用T-SQL语句创建主键约束,11,使用企业管理器创建主键约束,在表设计器中单击鼠标右键,在弹出的快捷菜单中选择“索引/键”,打开“属性”对话框,在该对话框中可以查看、创建、修改和删除主键,如下图。,12,使用T-SQL语句创建主键约束,语法(在CREATE TABLE 中加入) CONSTRAINT 主键约束名 PRIMARY KEY (列名1 , 列名2, . 列名n),13,例2,使用CREATE TABLE语句创建“测试”表,同时定义“记录编号”列为主键。 CREATE TABLE 测试 (记录编号 int, 记录名称 varchar(50), CONSTRAINT PK_测试 PRIMARY KEY (记录编号) ),14,8.1.2 唯一性约束,如果一个字段值不允许重复,则应当对该字段添加UNIQUE约束。与主键不同的是,在UNIQUE字段中允许出现NULL值,但为保持唯一性,最多只能出现一次NULL值。 惟一性约束可以保证除主键外的其他一个或多个列的数据唯一性,以防止在列中输入重复的值。 两种创建唯一性约束的方法 使用企业管理器创建唯一性约束 使用T-SQL语句创建唯一性约束,15,使用企业管理器创建唯一性约束,在表设计器中单击鼠标右键,在弹出的快捷菜单中选择“索引/键”,打开“属性”对话框,在这里可以查看、创建、修改和删除键。单击“新建”按钮,选中“创建UNIQUE”复选框,可以创建唯一性约束,如下图所示。,16,使用T-SQL语句创建惟一性约束,语法(在CREATE TABLE 中加入) : CONSTRAINT 约束名 UNIQUE CLUSTERED | NONCLUSTERED (列名1 , 列名2, . 列名n),17,例3,使用CREATE TABLE语句创建“测试”表,同时定义“记录编号”列为主键,“记录名称”列为唯一性约束。 CREATE TABLE 测试 ( 记录编号 int, 记录名称 varchar(50), CONSTRAINT PK_测试 PRIMARY KEY (记录编号), CONSTRAINT IX_测试 UNIQUE (记录名称) ),18,8.1.3 检查约束,CHECK约束用于检查一个字段或整个表的输入值是否满足指定的检查条件。在表中插入或修改记录时,如果不符合这个检查条件,则这条记录将被拒绝。 检查约束指定表中一列或多列可以接受的数据值或格式。例如,表“学生”中的“入学成绩”列的值应该大于或等于0。 两种创建检查约束的方法 使用企业管理器创建检查约束 使用T-SQL语句创建检查约束,19,使用企业管理器创建检查约束,在表设计器中单击右键,在弹出菜单中选择“CHECK约束”,打开“属性”对话框,在这里可以查看、创建、修改和删除检查约束。,20,使用T-SQL语句创建检查约束,语法: CONSTRAINT 约束名 CHECK NOT FOR REPLICATION (逻辑表达式),如果不指定约束名,则系统会自动分配一个名称。CHECK关键字指定当前创建的约束类型为检查约束。NOT FOR REPLICATION是可选项,用于指定当从其他表中复制数据时,不检查约束条件。逻辑表达式用于定义列的约束条件。,21,例4,使用CREATE TABLE语句创建“学生”表,同时创建检查约束,定义“入学成绩”列的值大于或等于0。 CREATE TABLE 学生 ( 记录编号 int IDENTITY(1,1), -定义该列为标识列 姓名 varchar(50) NOT NULL, 性别 bit DEFAULT(0), -定义该列的默认值为0 班级 varchar(50) NOT NULL, 入学成绩 float DEFAULT(0), 所属院系 int NOT NULL CONSTRAINT PK_学生 PRIMARY KEY (记录编号), CONSTRAINT IX_学生 UNIQUE (姓名), CONSTRAINT CK_学生 CHECK (入学成绩=0) ),22,例5,使用CREATE TABLE语句创建“客户”表,同时创建检查约束,定义“邮政编码”列的值是由6位数字组成的字符串。 CREATE TABLE 客户 ( 记录编号 int IDENTITY(1,1), 客户单位 varchar(50) NOT NULL, 地址 varchar(100) NOT NULL, 邮政编码 varchar(10) NOT NULL, CONSTRAINT PK_客户 PRIMARY KEY (记录编号), CONSTRAINT IX_客户 UNIQUE (客户单位), CONSTRAINT CK_客户 CHECK (邮政编码 LIKE 0-90-90-90-90-9 0-9) ),23,例6,使用CREATE TABLE语句创建“联系人”表,同时创建检查约束,定义“性别”列的值只能是“男”或“女”。 CREATE TABLE 联系人 ( 记录编号 int IDENTITY(1,1), 姓名 varchar(50) NOT NULL, 性别 char(2) NOT NULL, 电话 varchar(50) NOT NULL, CONSTRAINT PK_联系人 PRIMARY KEY (记录编号), CONSTRAINT IX_联系人 UNIQUE (姓名), CONSTRAINT CK_联系人 CHECK (性别 IN (男, 女) ),可以省略,按系统默认命名,24,8.1.4 外部键约束,外部键约束是用于建立两个表之间的一列或多列之间的联系。通过将当前表中的某一列或某几列关联到另一个表的主键列,可创建两个表之间的连接。当前表中的列就成为外部键。 外部键约束可以确保添加到外部键表中的任何行的外部键值在主表中都存在相应主键值,以保证数据的参照完整性。 两种创建外部键约束的方法 使用企业管理器创建外部键约束 使用T-SQL语句创建外部键约束,25,例7 使用企业管理器创建外部键约束,在“XJGL”数据库中,将“STUDENT”表的“ SNO”列设置为主键,与“SC”表中的“SNO”列与“STUDENT”表的“ SNO”对应,在企业管理器中为它们创建外键约束。,在企业管理器中右击“SC”表,在弹出菜单中选择“设计表”,打开表设计器。 在设计表对话框中右击鼠标,在弹出菜单中选择“关系”,打开“属性”对话框,如下页图所示,在该对话框中可以查看和管理关系。,26,27,使用T-SQL语句创建外部键约束,语法: CONSTRAINT 约束名 FOREIGN KEY (列名1 , 列名2, ., 列名n) REFERENCES 关联表 (关联列名1 , 关联列名2, ., 关联列名n),如果不指定约束名,则系统会自动分配一个名称。FOREIGN KEY关键字指定当前创建的约束类型为外部键约束。REFERENCES关键字指定与当前创建或修改的表相关联的表和列。,28,create table STUDENT1(sno char(4) primary key,sdeptname char(10) GO create table SC1(sno char(4),cno char(8), FOREIGN KEY(sno) REFERENCES student1(sno) go,例8 使用SQL语句创建外部键约束,29,级联删除和修改(cascade),create table STUDENT2(sno char(4) primary key,sdeptname char(10) GO create table SC2(sno char(4),cno char(8), FOREIGN KEY(sno) REFERENCES student2(sno) on delete cascade) -on delete cascade 级联删除 go insert student2 values(0001,a) insert student2 values(0002,b) insert sc2 values(0001,1) insert sc2 values(0001,2) insert sc2 values(0002,2) select * from student2 select * from sc2 go delete from student2 where sno=0001 go select * from student2 select * from sc2,30,使用约束的注意事项,不需要删除和重建表就可以创建、修改和删除约束 必须在应用程序和事务处理中建立错误检查逻辑,以检测是否违反了约束 向表添加约束时,SQL Server将验证现有数据 在创建约束时应该对其命名,31,8.2 默认值,默认值可以为指定列定义一个默认值。在输入数据时,如果没有输入该列的值,则将该列的值设置为默认值。 有两种方法使用默认值 在创建表时,指定默认值(企业管理器和SQL语句) 使用CREATE DEFAULT 语句创建默认对象,32,在创建表时,指定默认值(SQL语句),例9: CREATE TABLE AAA (A1 CHAR(4) DEFAULT 1111),在ALTER TABLE语句中,可以使用CONSTRAINT关键字定义默认约束,基本语法如下: CONSTRAINT 约束名 DEFAULT 约束表达式 FOR 列名 如果不指定约束名,则系统会自动分配一个名称。,33,例10:,使用CREATE TABLE语句创建“测试”表,同时定义“记录名称”列的默认约束为“默认名称”。 CREATE TABLE 测试 ( 记录编号 int, 记录名称 varchar(50), PRIMARY KEY (记录编号), UNIQUE (记录名称) ) ALTER TABLE 测试 ADD CONSTRAINT DE_测试 DEFAULT 默认名称 FOR 记录名称,34,8.2.2 使用默认对象,默认对象是单独存储的,删除表时DEFAULT约束会自动删除,但默认对象不会被删除.默认对象创建后,需要绑定到某列或用户自定义数据类型上. 1.创建 2.绑定 3.重命名 4.解除绑定 5.删除,35,1.创建,企业管理器中创建 SQL语句创建 例11: CREATE DEFAULT 性别值 AS 男,36,2.绑定,将默认对象“性别值”绑定到STUDENT表的SSEX字段 企业管理器中绑定 SQL语句创建 例12: EXEC SP_BINDEFAULT 性别值,STUDENT.SSEX,37,3.重命名,企业管理器中重命名 SQL语句创建 例13: EXEC SP_RENAME 性别值,性别默认值,38,4.解除绑定,企业管理器中解除绑定 SQL语句创建 例14: EXEC SP_UNBINDEFAULT STUDENT.SSEX,39,5.删除,企业管理器中删除 SQL语句创建 例15: DROP DEFAULT 性别默认值,40,8.3 规则,规则的概念 创建规则 绑定规则 解除绑定规则 删除规则,41,1.规则的概念,规则(Rules)是一种SQL Server对象,它用于执行一些与CHECK约束相同的功能。CHECK约束比规则更简明,一个列只能应用一个规则,但是却可以应用多个CHECK约束。,42,1. 创建规则,在企业管理器中的左侧窗格中展开指定的数据库,选择“规则”项,可以在右侧窗格中查看当前数据库的规则对象。,43,右键单击右侧窗格的空白区域,在弹出菜单中选择“新建规则”,打开“规则属性”对话框。,44,例16:,在企业管理器中创建规则“性别规则”,指定变量SSEX的取值只能为男或 女 。,性别规则,Ssex IN (男, 女),45,例17: 使用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025浙江中国小商品城集团股份有限公司招聘98人笔试参考题库附带答案详解
- 2025新疆哈密镜儿泉矿业有限责任公司第一批面向社会招聘19人笔试参考题库附带答案详解
- 卸货安全培训课件
- 2025年福建省榕圣建设发展有限公司项目招聘12人笔试参考题库附带答案详解
- 卸油操作安全培训课件
- 2025年佛山市禅城区国有资产监督管理局下属企业招聘工作人员4人笔试参考题库附带答案详解
- 2025山东聊城市市属企业统一招聘24人笔试参考题库附带答案详解
- 2025山东土地资本投资集团有限公司春季社会招聘10人笔试参考题库附带答案详解
- 2025国网西藏电力有限公司高校毕业生招聘约305人(第二批)笔试参考题库附带答案详解
- 2025四川资阳瑞达产业投资集团有限公司招聘9人笔试参考题库附带答案详解
- SYT 6680-2021 石油天然气钻采设备 钻机和修井机出厂验收规范-PDF解密
- 《遗传学》课程标准
- 蛋白质分离纯化及鉴定
- 2024年化粪池清理合同协议书范本
- 实用美术基础中职全套教学课件
- 债权债务法律知识讲座
- 南京财经大学《812西方经济学(宏观经济学、微观经济学)》历年考研真题及详解
- 基于教育培训行业的客户关系营销研究
- 肉制品工艺学-香肠类制品-课件
- 超全QC管理流程图
- 2广告实务课程标准
评论
0/150
提交评论