《企业局域网的安全与运维Ⅱ数据完整性约束》由会员分享,可在线阅读,更多相关《企业局域网的安全与运维Ⅱ数据完整性约束(34页珍藏版)》请在金锄头文库上搜索。
1、企业局域网的安全与运企业局域网的安全与运维维2数据完整性数据完整性约束约束本节学习目标本节学习目标l时间:时间:2次课,次课,4学时;学时;l本节学习目标:本节学习目标:l知识点:知识点:l数据库完整性的概念。数据库完整性的概念。l主键、外键、默认值、检查约束、唯一性约主键、外键、默认值、检查约束、唯一性约束的概念;束的概念; 本节学习目标本节学习目标l技能要求:技能要求:l能够创建和管理主键能够创建和管理主键l能够创建和管理外键;能够创建和管理外键;l能够创建管理检查约束;能够创建管理检查约束;l能够创建管理唯一性约束;能够创建管理唯一性约束;l能够创建管理非空约束和默认值约束能够创建管理非
2、空约束和默认值约束l能够测试各项约束的有效性;能够测试各项约束的有效性;l能够在数据库中创建数据库关系图能够在数据库中创建数据库关系图 课程引入课程引入l演示:演示:l通过通过SSMS向数据库向数据库S_C_T的的Student表中执表中执行下列操作:行下列操作:l将学生的年龄写入将学生的年龄写入10000;l将学生的性别写入将学生的性别写入abc;l将两个不同教师的身份证号码写成相同的数据将两个不同教师的身份证号码写成相同的数据“111111111111111111”。思考思考l数据库对不合理数据没有任何限制?数据库对不合理数据没有任何限制?l这样的话,数据库中的数据还有意义吗?这样的话,数
3、据库中的数据还有意义吗?l通过哪些手段防止上述情况的发生?通过哪些手段防止上述情况的发生?l手段之一:约束手段之一:约束SQL Server的的数据完整性约束的类型数据完整性约束的类型l主键约束主键约束l外键约束外键约束l唯一性约束唯一性约束l检查约束检查约束l默认值默认值l空值约束空值约束数据库完整性概述数据库完整性概述l数据库的完整性数据库的完整性l数据的正确性和相容性数据的正确性和相容性l数据的完整性和安全性是两个不同概念数据的完整性和安全性是两个不同概念l数据的完整性数据的完整性防止数据库中存在不符合语义的数据,也就是防止数据防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正
4、确的数据库中存在不正确的数据防范对象:不合语义的、不正确的数据防范对象:不合语义的、不正确的数据l数据的安全性数据的安全性保护数据库防止恶意的破坏和非法的存取保护数据库防止恶意的破坏和非法的存取防范对象:非法用户和非法操作防范对象:非法用户和非法操作1、设置约束、设置约束主键约束主键约束 主键约束主键约束 :l主键能够唯一地确定表中的每一条记录,主键主键能够唯一地确定表中的每一条记录,主键不能取空值。不能取空值。l一个表应该有一个一个表应该有一个 PRIMARY KEY 约束约束 l一个表只能有一个一个表只能有一个 PRIMARY KEY 约束约束 主键约束违约处理主键约束违约处理l插入或对主
5、键列进行更新操作时,插入或对主键列进行更新操作时,DBMSDBMS按照完整性规按照完整性规则自动进行检查。包括:则自动进行检查。包括:l1. 1. 检查主键值是否唯一,如果不唯一则拒绝插入检查主键值是否唯一,如果不唯一则拒绝插入或修改;或修改;l2. 2. 检查主键的各个属性是否为空,只要有一个为检查主键的各个属性是否为空,只要有一个为空就拒绝插入或修改;空就拒绝插入或修改;主键约束违约处理主键约束违约处理l检查记录中主键值是否唯一和为空的一种方法是进行检查记录中主键值是否唯一和为空的一种方法是进行全表扫描全表扫描演示演示l例例1 1 将将StudentStudent表中的表中的SnoSno属
6、性定义为主属性定义为主键;键;l例例2 2将将SCSC表中的表中的SnoSno,CnoCno属性组定义为主属性组定义为主键(复合主键,键(复合主键,最多为最多为1616列列););2 2、唯一性约束(、唯一性约束(UKUK)l唯唯一一性性约约束束作作用用:指指定定一一个个或或多多个个列列的的组组合合值具有唯一性,以防止在列中输入重复的值。值具有唯一性,以防止在列中输入重复的值。l使用唯一性约束的字段允许为空值;使用唯一性约束的字段允许为空值;l一个表中可以允许有多个唯一性约束;一个表中可以允许有多个唯一性约束;l唯唯一一性性约约束束用用于于强强制制在在指指定定字字段段上上创创建建一一个个唯一性
7、索引;唯一性索引;演示演示l例例4 4在教师表在教师表T T中的身份证号中的身份证号IDnumIDnum列上创列上创建唯一约束。建唯一约束。主键约束和唯一性约束的差别主键约束和唯一性约束的差别l唯一性约束所在的列允许空值,但是主键约束唯一性约束所在的列允许空值,但是主键约束所在的列不允许空值。所在的列不允许空值。l可以把唯一性约束放在一个或者多个列上,这可以把唯一性约束放在一个或者多个列上,这些列或列的组合必须有唯一的值。但是,唯一些列或列的组合必须有唯一的值。但是,唯一性约束所在的列并不是表的主键列。性约束所在的列并不是表的主键列。3、检查约束(检查约束(CheckCheck)l作作用用:通
8、通过过一一个个或或多多个个字字段段上上的的输输入入值值是是否否符符合设定的检查条件来保证数据库数据的完整性。合设定的检查条件来保证数据库数据的完整性。l一个表中可以定义多个检查约束;一个表中可以定义多个检查约束;l当当执执行行向向数数据据库库中中插插入入数数据据或或更更新新数数据据时时,检检查约束将验证数据;查约束将验证数据;演示演示l例例5 5将表将表S S表的表的sexsex列的取值只允许为列的取值只允许为“男男”或或“女女”。l例例6 6将表将表SCSC中的中的scorescore列数据的取值范围设列数据的取值范围设置为置为0-1000-100之间。之间。CHECK约束总结约束总结 1、
9、CHECK约束是在创建表时指定的。约束是在创建表时指定的。 2、在每个列上可使用多个、在每个列上可使用多个CHECK约束。约束。 3、CHECK约束只能应用于它定义的列。约束只能应用于它定义的列。4、默认约束默认约束l默认约束来指定列的默认值。向表中插入记录默认约束来指定列的默认值。向表中插入记录时,数据库会在该列的对应位置填入默认值。时,数据库会在该列的对应位置填入默认值。l每个字段只能定义一个默认约束;每个字段只能定义一个默认约束;l默认值必须与该列数据类型兼容。默认值必须与该列数据类型兼容。演示演示l例例7 7将学生表将学生表S S中的系别(中的系别(departmentdepartme
10、nt)列)列的默认值设置为的默认值设置为“计算机系计算机系”。5、空值约束(空值约束(NullNull)l列可以接受空值,也可以拒绝空值。列可以接受空值,也可以拒绝空值。l在数据库中,在数据库中,NULL 是一个特殊值,表示未知值是一个特殊值,表示未知值的概念。的概念。lNULL 不同于空字符或不同于空字符或 0。实际上,空字符是一。实际上,空字符是一个有效的字符,个有效的字符,0 是一个有效的数字。是一个有效的数字。NULL 只只是表示此值未知这一概念。是表示此值未知这一概念。NULL 也不同于零长也不同于零长度字符串。度字符串。 空值约束(空值约束(NullNull)l空值约束允许一列或多
11、列的值不为空。空值约束允许一列或多列的值不为空。l空(空(NULL)标识未定义或未知的值。)标识未定义或未知的值。l默认情况下运行为空,如果要某列不接受空值,默认情况下运行为空,如果要某列不接受空值,则必须在该列上设置非空约束。则必须在该列上设置非空约束。空值约束违约处理空值约束违约处理l当插入数据给非空列保持为空时,将会出现一当插入数据给非空列保持为空时,将会出现一个约束错误,表示不允许在该列中输入空值,个约束错误,表示不允许在该列中输入空值,否则不能插入下一条记录,也不允许保存数据。否则不能插入下一条记录,也不允许保存数据。l在某列上定义在某列上定义Primary Key约束,该列必然遵约
12、束,该列必然遵守守NOT NULL约束。约束。演示演示l例例8 8将表将表S S的编号(的编号(snosno)、姓名()、姓名(snsn)和)和性别(性别(sexsex)列设置为不允许为空;向表)列设置为不允许为空;向表S S中插中插入一条新的学生记录,查看姓名和性别项为空入一条新的学生记录,查看姓名和性别项为空时出现的提示时出现的提示。6、外键约束(、外键约束(FK)l通过创建外键约束可以实现表和表之间的依通过创建外键约束可以实现表和表之间的依赖关系,实现数据的一致性。赖关系,实现数据的一致性。 l外键约束定义一个列或多个列,这些列可以外键约束定义一个列或多个列,这些列可以参考同一个表或另外
13、一个表中的参考同一个表或另外一个表中的主键约束列主键约束列或或惟一性约束列惟一性约束列,唯一索引列唯一索引列。l主键所在的表叫主键所在的表叫主表主表,属于一对多关系中的,属于一对多关系中的一;一;l外键所在的表叫外键所在的表叫从表从表,属于一对多关系中的,属于一对多关系中的多;多;设置约束设置约束外键约束外键约束l主主键键和和外外键键的的字字段段名名不不一一定定相相同同,但但是是数数据据类类型、字段长度必须严格匹配型、字段长度必须严格匹配。l一个表中最多可以有一个表中最多可以有31个外键约束;个外键约束;v子表不能引用不存在的键值。子表不能引用不存在的键值。v如如果果主主表表中中的的一一行行被
14、被一一个个外外键键参参考考,那那么么该该行行不不能能被被删删除除(除除非非定定义义了了级级联联删删除除和和触触发发器),主键值也不能修改。器),主键值也不能修改。外键约束违约处理外键约束违约处理可能破坏参照完整性的情况及违约处理被参照表(例如表被参照表(例如表S)参照表(例如参照表(例如SC)违约处理违约处理可能破坏参照完整性可能破坏参照完整性 插入记录插入记录拒绝拒绝可能破坏参照完整性可能破坏参照完整性 修改外键值修改外键值拒绝拒绝删除记录删除记录 可能破坏参照完整可能破坏参照完整性性拒绝拒绝修改主键值修改主键值 可能破坏参照完整可能破坏参照完整性性拒绝拒绝演示演示l例例3 3表表SCSC中
15、一条记录表示一个学生选修的中一条记录表示一个学生选修的某门课程的成绩,(某门课程的成绩,(SnoSno,CnoCno)是主键。)是主键。SnoSno,CnoCno分别参照引用分别参照引用StudentStudent表的主键和表的主键和CourseCourse表的主键。表的主键。关系数据库提供的三种完整性关系数据库提供的三种完整性l实体完整性实体完整性l域完整性域完整性l参照完整性参照完整性关系数据库的数据完整性关系数据库的数据完整性 数数据据完完整整性性就就是是指指存存储储在在数数据据库库中中的的数数据据的的一一致致性和准确性。性和准确性。 在关系数据库中,主要有以下几种类型:在关系数据库中,
16、主要有以下几种类型:1、域域完完整整性性: (列列完完整整性性),规规定定了了给给定定列列输输入入数据的有效性。数据的有效性。 例例如如,在在“成成绩绩”列列中中,限限制制其其取取值值范范围围为为0到到100,其他的取值无效。,其他的取值无效。 有有效效性性检检查查限限制制数数据据类类型型、或或数数据据取取值值范范围围,设设定默认值、外键、规则()实现。定默认值、外键、规则()实现。l2、实体完整性:(行完整性),要求表中所、实体完整性:(行完整性),要求表中所有的行唯一。可通过设置主键约束(有的行唯一。可通过设置主键约束()、惟一索引()、惟一索引()、标识列)、标识列(Identity C
17、olumn)等多等多种方法等实现。种方法等实现。3、参参照照完完整整性性:涉涉及及两两个个或或两两个个以以上上表表的的数数据据的的一一致致性性维维护护。它它可可以以通通过过主主键键/外外键键值值约约束束,触触发发器器()和和存存储储过过程程(),实现。),实现。约束的几种主要类型的作用约束的几种主要类型的作用完整性类型约 束 类 型描 述域完整性DEFAULT(缺省)在使用INSERT语句插入数据时,如果某个列的值没有明确提供,则将定义的缺省值插入到该列中CHECK(检查)指定某一个列中的可保存值的范围实体完整性PRIMARY KEY(主键)每一行的惟一标识符,确保用户不能输入冗余值和确保创建
18、索引,提高性能,不允许空值UNIQUE(惟一性)防止出现冗余值,并且确保创建索引,提高性能。允许空值参考完整性FOREIGN KEY(外键)定义一列或者几列,其值与本表或者另外一个表的主键值匹配数据库关系图的创建数据库关系图的创建l在定义好表结构和创建好约束后,可以创建数在定义好表结构和创建好约束后,可以创建数据库关系图;据库关系图;本节小结本节小结l空值约束限定某列数据是必填项。空值约束限定某列数据是必填项。l主键约束和唯一性约束的区别。主键约束和唯一性约束的区别。l作业:作业:l简述简述SQL Server 2005中各类约束的特点和作中各类约束的特点和作用范围?用范围?l请说明数据完整性的类型和实现方法?请说明数据完整性的类型和实现方法?