版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQLServer2012数据库管理教程第8章第8章约束的创建与管理数据完整性概述创建约束禁用约束约束的重命名与删除8.1数据完整性概述1.实体完整性实体完整性要求表中的每一行必须是唯一的,可以通过主键约束、唯一约束、索引或标识属性来实现。2.域完整性域完整性就是保证数据库中的数据取值的合理性。例如,表的某一列的任何值都是该列域的合法的有效成员。
保证域有效性的方法有:通过数据类型的定义限制数据类型,通过CHECK约束、规则、默认值和非空属性的定义来确定数据的格式及取值范围。3.参照完整性参照完整性定义了一个关系数据库的不同的表中列之间的关系(父键与外键)。要求一个表中(子表)的一列或一组列的值必须与另一个表(父表)中的相关一列或一组列的值相匹配。被引用的列或一组列称为父键,父键必须是主键或唯一键。外键表是子表。如果父键和外键属于同一个表,则称为自参照完整性。子表的外键必须与主表的主键相匹配,只要依赖某一主键的外键存在,主表中包含该主键的行就不能被删除。8.2创建约束一个表只能有一个PRIMARYKEY约束。包含在PRIMARYKEY约束中的列不能接受NULL值。指定为PRIMARYKEY的列中的值必须是唯一的。如果PRIMARYKEY约束包含多列,则一个列中可以出现重复值,但是PRIMARYKEY约束定义中的所有列值的组合必须是唯一的。8.2.1PRIMARYKEY约束PRIMARYKEY约束定义表中构成主键的一列或多列。主键唯一标识表中的行,并强制实施表的实体完整性。在实现PRIMARYKEY约束之前,要考虑以下事实:1.利用SQLServerManagementStudio创建PRIMARYKEY约束1)在“对象资源管理器”窗格中,右击要创建PRIMARYKEY约束的表,从弹出的快捷菜单中选择“设计”命令,如下图所示。2)接下来,在打开的表设计器中,有两种方法可以完成主键设置。第一种:选择要设置为PRIMARYKEY约束的列,然后单击工具栏中的“设置主键”按钮
即可。第二种:右击选中的列,从弹出的快捷菜单中选择“设置主键”命令,如图所示,即可成功设置PRIMARYKEY约束。2.使用Transact-SQL语句创建PRIMARYKEY结束可以使用CREATETABLE和ALTERTABLE语句的表级CONSTRAINT子句创建PRIMARYKEY约束。【例8-1】为jw数据库的Class表中的ClassNo列设置PRIMARYKEY约束。USEjwGOALTERTABLEClassADDConstraint[PK_classsno]PRIMARYKEYCLUSTERED(ClassNoASC)8.2.2DEFAULT约束DEFAULT约束的作用就是当向表中添加数据时,如果某列没有指定具体的数值而是指定了DEFAULT关键字,则该列值将自动添加为默认值。DEFAULT约束强制实施域完整性,是避免空值的有效方法之一。在实现DEFAULT约束之前,要考虑以下事实:DEFAULT约束仅应用于INSERT语句。每个列只能有一个DEFAULT约束。具有IDENTITY属性或数据类型为rowversion的列上不可施加DEFAULT约束。DEFAULT约束允许指定某些系统提供的值,如USER,CURRENT_USER,SESSION_USER,SYSTEM_USER或CURRENT_TIMESTAMP,而不是用户定义的值。在SQLServerManagementStudio中可以很容易创建DEFAULT约束。在表设计器中,单击要创建DEFAULT约束的列;在出现的“列属性”选项卡中,将“允许Null”设置为“否”;在“默认值或绑定”右侧文本框中输入所要设置的默认值,如右图所示。【例8-2】为jw数据库的Score表中的Score列设置DEFAULT约束。USEjwGOALTERTABLEScoreADDConstraint[DF_score]DEFAULT(0.0)FORScore同样,DEFAULT约束也可以使用CREATETABLE和ALTERTABLE语句的表级CONSTRAINT子句创建。8.2.3CHECK约束CHECK约束通过限制可输入或修改的一列或多列的值来强制实现域完整性,作用于插入(INSERT)和修改(UPDATE)语句。在默认情况下,CHECK约束同时作用于新数据和表中已有的数据,可以通过WITHNOCHECK关键字禁止CHECK约束检查表中已有的数据。实现CHECK约束之前,要考虑以下事实:CHECK约束在每次执行INSERT或UPDATE语句时验证数据。CHECK约束可以是返回TRUE或FALSE的任何逻辑(布尔)表达式。CHECK约束不可包含子查询。单个列可有多个CHECK约束。CHECK约束不可施加于属于rowversion,text,ntext或image数据类型的列。数据库一致性检查器(DBCC)CHECKCONSTRAINTS语句将返回包含违反CHECK约束的数据的任何行。可以使用SQLServerManagementStudio来创建CHECK约束。1)在打开的表设计器中,右击所要设置的列名,从弹出的菜单中选择“CHECK约束”命令,如右图所示。2)在打开的“CHECK约束”对话框中单击“添加”按钮,新建一个CHECK约束,在右侧“表达式”文本框中输入CHECK约束表达式,如下图所示。【例8-3】使用Transact-SQL语句在jw数据库中为Score表创建CHECK约束,该约束限制Score列值只允许在0~100取值。USEjwGOALTERTABLEScoreADDConstraint[CK_Score]CHECK(Score>=0ANDScore<=100)GO8.2.4UNIQUE约束UNIQUE约束用于确保数据表的实体完整性,它限制指定列的所有值都是唯一的。在创建UNIQUE约束之前,要考虑以下事实:在带有UNIQUE约束的列中只能出现一个NULL值。一个表可以有多个UNIQUE约束,但是它只能有一个主键。UNIQUE约束是通过对指定的一列或多列创建唯一索引来实施的。此索引并不能违反表最多支持249个非聚集索引的限制。如果对包含重复值数据的列创建UNIQUE约束,则数据库引擎将返回错误。下面介绍如何在SQLServerManagementStudio中创建UNIQUE约束。1)在打开的表设计器中,右击所要设置的列名,从弹出的菜单中选择“索引/键”命令,如右图所示。2)在打开的“索引/键”对话框中,单击“添加”按钮,在右侧将“类型”设置为“唯一键”,将“列”设置为需要创建的列,如下图所示。完成后单击“关闭”按钮。同样,UNIQUE约束也可以使用CREATETABLE和ALTERTABLE语句的表级CONSTRAINT子句创建。【例8-4】使用Transact-SQL语句在jw数据库中为Class表创建UNIQUE约束,保证ClassName不会出现重复记录。USEjwGOALTERTABLEClassADDConstraint[IX_classname]UNIQUE(ClassName)GO8.2.5FOREIGNKEY约束FOREIGNKEY约束定义对同一个表或另一个表中具有PRIMARYKEY或UNIQUE约束的列的引用。外键列中的值必须出现在主键列中。当存在对主键值的引用时,不可更改或删除主键值。在创建FOREIGNKEY约束之前,要考虑以下事实:FOREIGNKEY约束提供了单列引用完整性和多列引用完整性,原表和引用表中引用列数及列的数据类型必须一致。FOREIGNKEY约束不会自动创建索引,但如果需要,用户可手工创建。在定义FOREIGNKEY约束时,可以引用同一个表中的主键列。当修改FOREIGNKEY约束所在表的数据时,用户必须拥有该约束所引用表的SELECT权限或REFERENCES权限。可以使用SQLServerManagementStudio来创建FOREIGNKEY约束。1)在打开的表设计器中,右击所要设置的列名,从弹出的快捷菜单中选择“关系”命令,如右图所示。2)打开“外键关系”对话框,如下图所示,单击“表和列规范”文本框右侧的按钮,打开“表和列”对话框。3)在打开的“表和列”对话框中,选择主键表和主键,并设置对应的外键,如下图所示。可以在“关系名”文本框中修改FOREIGNKEY约束的名称,完成后单击“确定”按钮。【例8-5】使用Transact-SQL语句在jw数据库中为Class表创建FOREIGNKEY约束,该约束限制DepartNo列的数据只能是Department表的DepartNo列中存在的数据。USEjwGOALTERTABLEClassADDConstraint[FK_departno]FOREIGNKEY(DepartNo)REFERENCESDepartment(DepartNo)GO使用CREATETABLE和ALTERTABLE语句的表级CONSTRAINT子句也可以创建FOREIGNKEY约束。8.3禁用约束需要运行大型批处理作业或者导入数据,并且希望优化性能。但需要确认数据符合相应的约束,或者运行查询来确保在恢复启用约束之前数据是准确的。在已经包含数据的表上定义约束。因此,每行数据只有在下次被修改时才会由约束进行验证。在以下情况中,应该考虑禁用约束:在向包含现有数据的表添加CHECK约束或FOREIGNKEY约束时,若要禁用约束检查,应在ALTERTABLE语句中包含WITHNOCHECK选项。系统将在以后更新约束列时检查现有数据。【例8-6】禁用jw数据库中Class表的FK_departno外键约束。ALTERTABLEClassNOCHECKCONSTRAINTFK_departno下面的代码重新启用了FK_departno约束:ALT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 质量检验员聘用合同格式
- 2024年度医疗器械代理注册合同规范范本3篇
- 食品安全合同管理流程
- 2025年度五星级酒店VIP客户住宿服务协议书3篇
- 能源检测薪资结构
- 语言培训中心外教劳动合同样本
- 2025奥菱达电梯有限企业电梯部件供应及维修服务协议3篇
- 施工成本钢结构安全协议
- 投资入伙协议书范本
- 2025年度口腔医疗市场营销合作协议书3篇
- 高考语文复习小说阅读之人物形象课件54张
- 控制系统的滞后校正设计
- 20以内加减法口算题100道计时精编版(共计3500道)可直接打印
- 错题资源与利用方式
- 灯会安全施工方案
- 井下绳索取芯的自动化与智能化发展研究
- CNAS-CL02:2023 医学实验室质量和能力认可准则
- 增值税发票销货清单
- 温湿度记录表
- 痛经症状量表(CMSS)全
- 水果店应急预案范本
评论
0/150
提交评论