




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、SQL Server 2012数据库管理教程第第8章章第8 8章 约束的创建与管理数据完整性概述创建约束禁用约束约束的重命名与删除8 8.1 .1 数据完整性概述1 1实体完整性实体完整性要求表中的每一行必须是唯一的,可以通过主键约束、唯一约束、索引或标识属性来实现。2 2域完整性域完整性就是保证数据库中的数据取值的合理性。例如,表的某一列的任何值都是该列域的合法的有效成员。 保证域有效性的方法有:通过数据类型的定义限制数据类型,通过CHECKCHECK约束、规则、默认值和非空属性的定义来确定数据的格式及取值范围。3 3参照完整性参照完整性定义了一个关系数据库的不同的表中列之间的关系(父键与外
2、键)。要求一个表中(子表)的一列或一组列的值必须与另一个表(父表)中的相关一列或一组列的值相匹配。被引用的列或一组列称为父键,父键必须是主键或唯一键。外键表是子表。如果父键和外键属于同一个表,则称为自参照完整性。子表的外键必须与主表的主键相匹配,只要依赖某一主键的外键存在,主表中包含该主键的行就不能被删除。8 8.2 .2 创建约束一个表只能有一个PRIMARY KEYPRIMARY KEY约束。包含在PRIMARY KEYPRIMARY KEY约束中的列不能接受NULLNULL值。指定为PRIMARY KEYPRIMARY KEY的列中的值必须是唯一的。如果PRIMARY KEYPRIMAR
3、Y KEY约束包含多列,则一个列中可以出现重复值,但是PRIMARY KEYPRIMARY KEY约束定义中的所有列值的组合必须是唯一的。8.2.1 PRIMARY KEY8.2.1 PRIMARY KEY约束PRIMARY KEYPRIMARY KEY约束定义表中构成主键的一列或多列。主键唯一标识表中的行,并强制实施表的实体完整性。在实现PRIMARY KEYPRIMARY KEY约束之前,要考虑以下事实:1 1利用SQL Server Management StudioSQL Server Management Studio创建PRIMARY KEYPRIMARY KEY约束1 1)在“对
4、象资源管理器”窗格中,右击要创建PRIMARY KEYPRIMARY KEY约束的表,从弹出的快捷菜单中选择“设计”命令,如下图所示。2 2)接下来,在打开的表设计器中,有两种方法可以完成主键设置。第一种:选择要设置为PRIMARY KEYPRIMARY KEY约束的列,然后单击工具栏中的“设置主键”按钮 即可。第二种:右击选中的列,从弹出的快捷菜单中选择“设置主键”命令,如图所示,即可成功设置PRIMARY KEYPRIMARY KEY约束。2 2使用Transact-SQLTransact-SQL语句创建PRIMARY KEYPRIMARY KEY结束可以使用CREATE TABLECRE
5、ATE TABLE和ALTER TABLEALTER TABLE语句的表级CONSTRAINTCONSTRAINT子句创建PRIMARY KEYPRIMARY KEY约束。【例8-18-1】为jwjw数据库的ClassClass表中的ClassNoClassNo列设置PRIMARY KEYPRIMARY KEY约束。USE jwUSE jwGOGOALTER TABLE ClassALTER TABLE Class ADD Constraint PK_classsno PRIMARY KEY CLUSTERED ADD Constraint PK_classsno PRIMARY KEY CL
6、USTERED (ClassNo ASC) (ClassNo ASC)8.2.2 DEFAULT8.2.2 DEFAULT约束DEFAULTDEFAULT约束的作用就是当向表中添加数据时,如果某列没有指定具体的数值而是指定了DEFAULTDEFAULT关键字,则该列值将自动添加为默认值。DEFAULTDEFAULT约束强制实施域完整性,是避免空值的有效方法之一。在实现DEFAULTDEFAULT约束之前,要考虑以下事实:DEFAULTDEFAULT约束仅应用于INSERTINSERT语句。每个列只能有一个DEFAULTDEFAULT约束。具有IDENTITYIDENTITY属性或数据类型为ro
7、wversionrowversion的列上不可施加DEFAULTDEFAULT约束。DEFAULTDEFAULT约束允许指定某些系统提供的值,如USERUSER,CURRENT_USERCURRENT_USER,SESSION_USERSESSION_USER,SYSTEM_USERSYSTEM_USER或CURRENT_TIMESTAMPCURRENT_TIMESTAMP,而不是用户定义的值。在SQL Server Management SQL Server Management StudioStudio中可以很容易创建DEFAULTDEFAULT约束。在表设计器中,单击要创建DEFAULT
8、DEFAULT约束的列;在出现的“列属性”选项卡中,将“允许NullNull”设置为“否”;在“默认值或绑定”右侧文本框中输入所要设置的默认值,如右图所示。【例8-28-2】为jwjw数据库的ScoreScore表中的ScoreScore列设置DEFAULTDEFAULT约束。USE jwUSE jwGOGOALTER TABLE ScoreALTER TABLE Score ADD Constraint DF_score DEFAULT(0.0) ADD Constraint DF_score DEFAULT(0.0) FOR Score FOR Score同样,DEFAULTDEFAULT
9、约束也可以使用CREATE TABLECREATE TABLE和ALTER TABLEALTER TABLE语句的表级CONSTRAINTCONSTRAINT子句创建。8.2.3 CHECK8.2.3 CHECK约束CHECKCHECK约束通过限制可输入或修改的一列或多列的值来强制实现域完整性,作用于插入(INSERTINSERT)和修改(UPDATEUPDATE)语句。在默认情况下,CHECKCHECK约束同时作用于新数据和表中已有的数据,可以通过WITH NOCHECKWITH NOCHECK关键字禁止CHECKCHECK约束检查表中已有的数据。实现CHECKCHECK约束之前,要考虑以下
10、事实:CHECKCHECK约束在每次执行INSERTINSERT或UPDATEUPDATE语句时验证数据。CHECKCHECK约束可以是返回TRUETRUE或FALSEFALSE的任何逻辑(布尔)表达式。CHECKCHECK约束不可包含子查询。单个列可有多个CHECKCHECK约束。CHECKCHECK约束不可施加于属于rowversionrowversion,texttext,ntextntext或imageimage数据类型的列。数据库一致性检查器(DBCCDBCC)CHECK CONSTRAINTSCHECK CONSTRAINTS语句将返回包含违反CHECKCHECK约束的数据的任何行
11、。可以使用SQL Server SQL Server Management StudioManagement Studio来创建CHECKCHECK约束。1 1)在打开的表设计器中,右击所要设置的列名,从弹出的菜单中选择“CHECKCHECK约束”命令,如右图所示。2 2)在打开的“CHECKCHECK约束”对话框中单击“添加”按钮,新建一个CHECKCHECK约束,在右侧“表达式”文本框中输入CHECKCHECK约束表达式,如下图所示。【例8-38-3】使用Transact-SQLTransact-SQL语句在jwjw数据库中为ScoreScore表创建CHECKCHECK约束,该约束限制S
12、coreScore列值只允许在0 0100100取值。USE jwUSE jwGOGOALTER TABLE ScoreALTER TABLE Score ADD Constraint CK_Score CHECK (Score=0 AND Score=0 AND Score=100)GOGO8.2.4 UNIQUE8.2.4 UNIQUE约束UNIQUEUNIQUE约束用于确保数据表的实体完整性,它限制指定列的所有值都是唯一的。在创建UNIQUEUNIQUE约束之前,要考虑以下事实:在带有UNIQUEUNIQUE约束的列中只能出现一个NULLNULL值。一个表可以有多个UNIQUEUNIQU
13、E约束,但是它只能有一个主键。UNIQUEUNIQUE约束是通过对指定的一列或多列创建唯一索引来实施的。此索引并不能违反表最多支持249249个非聚集索引的限制。如果对包含重复值数据的列创建UNIQUEUNIQUE约束,则数据库引擎将返回错误。下面介绍如何在SQL Server SQL Server Management StudioManagement Studio中创建UNIQUEUNIQUE约束。1 1)在打开的表设计器中,右击所要设置的列名,从弹出的菜单中选择“索引/ /键”命令,如右图所示。2 2)在打开的“索引/ /键”对话框中,单击“添加”按钮,在右侧将“类型”设置为“唯一键”,
14、将“列”设置为需要创建的列,如下图所示。完成后单击“关闭”按钮。同样,UNIQUEUNIQUE约束也可以使用CREATE TABLECREATE TABLE和ALTER TABLEALTER TABLE语句的表级CONSTRAINTCONSTRAINT子句创建。【例8-48-4】使用Transact-SQLTransact-SQL语句在jwjw数据库中为ClassClass表创建UNIQUEUNIQUE约束,保证ClassNameClassName不会出现重复记录。USE jwUSE jwGOGOALTER TABLE ClassALTER TABLE Class ADD Constraint
15、 IX_classname UNIQUE (ClassName) ADD Constraint IX_classname UNIQUE (ClassName)GOGO8.2.5 FOREIGN KEY8.2.5 FOREIGN KEY约束FOREIGN KEYFOREIGN KEY约束定义对同一个表或另一个表中具有PRIMARY KEYPRIMARY KEY或UNIQUEUNIQUE约束的列的引用。外键列中的值必须出现在主键列中。当存在对主键值的引用时,不可更改或删除主键值。在创建FOREIGN KEYFOREIGN KEY约束之前,要考虑以下事实:FOREIGN KEYFOREIGN KEY
16、约束提供了单列引用完整性和多列引用完整性,原表和引用表中引用列数及列的数据类型必须一致。FOREIGN KEYFOREIGN KEY约束不会自动创建索引,但如果需要,用户可手工创建。在定义FOREIGN KEYFOREIGN KEY约束时,可以引用同一个表中的主键列。当修改FOREIGN KEYFOREIGN KEY约束所在表的数据时,用户必须拥有该约束所引用表的SELECTSELECT权限或REFERENCESREFERENCES权限。可以使用SQL Server SQL Server Management StudioManagement Studio来创建FOREIGN KEYFOREI
17、GN KEY约束。1 1)在打开的表设计器中,右击所要设置的列名,从弹出的快捷菜单中选择“关系”命令,如右图所示。2 2)打开“外键关系”对话框,如下图所示,单击“表和列规范”文本框右侧的按钮,打开“表和列”对话框。3 3)在打开的“表和列”对话框中,选择主键表和主键,并设置对应的外键,如下图所示。可以在“关系名”文本框中修改FOREIGN KEYFOREIGN KEY约束的名称,完成后单击“确定”按钮。【例8-58-5】 使用Transact-SQLTransact-SQL语句在jwjw数据库中为ClassClass表创建FOREIGN KEYFOREIGN KEY约束,该约束限制Depar
18、tNoDepartNo列的数据只能是DepartmentDepartment表的DepartNoDepartNo列中存在的数据。USE jwUSE jwGOGOALTER TABLE ClassALTER TABLE Class ADD Constraint FK_departno ADD Constraint FK_departno FOREIGN KEY (DepartNo) FOREIGN KEY (DepartNo) REFERENCES Department(DepartNo) REFERENCES Department(DepartNo)GOGO使用CREATE TABLECREATE TABLE和ALTER TABLEALTER TABLE语句的表级CONSTRAINTCONSTRAINT子句也可以创建FOREIGN KEYFOREIGN KEY约束。8 8.3 .3 禁用约束需要运行大型批处理作业或者导入数据,并且希望优化性能。但需要确认数据符合相应的约束,或者运行查询来确保在恢复启用约束之前数据是准确的。在已经包含数据的表上定义约束。因此,每行数据只有在下次被修改时才会由约束进行验证。在以下情况
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 游戏虚拟角色形象设计授权与衍生品开发协议
- 淘宝直播网红孵化与内容制作合同
- 建筑工程质量追溯检测设备租赁与服务保障协议
- 河道生态修复与景观美化工程协议
- 拼多多果园农产品溯源与质量控制支持服务合同
- 《掌握营销策略制胜之道:课件深度解析》
- 福禄贝尔人的教育
- 《幼苗成长与收获》课件
- 自我意识的活动解析与应用
- 《灌木类园林植物》课件
- (二模)贵阳市2025年高三年级适应性考试(二)物理试卷(含答案)
- 汽车起重机日常检查维修保养记录表
- 中国糖尿病患者的白内障围手术期防治策略专家共识(2020年)
- 锦程网生涯规划书
- 2020 ACLS-PC-SA课前自我测试试题及答案
- (完整版)《安全标志及其使用导则规范》
- 新制经济学学习教案
- 铁皮石斛集约化高产栽培技术研究
- GB∕T 31838.7-2021 固体绝缘材料 介电和电阻特性 第7部分:电阻特性(DC方法) 高温下测量体积电阻和体积电阻率
- 变频器变频altivar71说明书
- 车门玻璃升降器的设计与运动仿真设计
评论
0/150
提交评论