SQL Server 数据库基础及应用-5_第1页
SQL Server 数据库基础及应用-5_第2页
SQL Server 数据库基础及应用-5_第3页
SQL Server 数据库基础及应用-5_第4页
SQL Server 数据库基础及应用-5_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

5.1数据完整性的重要作用

在数据库的设计和管理的过程中,维护数据完整性是一项重要的I作。数据的完整性关系到数据库中数据的精确性、可用性。所谓数据完整性,就是指存储在数据库中的数据的一致性、正确性、精确性和可用性。

保证数据库的数据完整性,在数据库管理信息系统中是十分重要的。因为数据的完整,是用户使用和管理数据库的基础。完整的数据为客户提供可用的数据服务。例如:xscj数据库中student表的学号必须是唯一的,性别只能为男或女;average表中的学号必须是student表中@有的学号等。数据库是否具备完整性涉及数据系统中的数据是否正确、可信和一致。下一页返回5.1数据完整性的重要作用

为了保证数据库的完整性,SQLServer中提供了定义、检查和控制数据完整性的机制,并把用户定义的数据库完整性约束条件作为模式的一部分存入数据库中。我们必须了解数据库完整性的内容和控制机制,掌握定义数据完整性的方法。

在SQLServer2012数据库中,根据数据完整性涉及方式的不同,以及它所作用的数据库对象和范围的不同,可将数据完整性分为4种类型,即实体完整性、域完整性、参照完整性及用户定义完整性。上一页下一页返回5.1数据完整性的重要作用5.11.实体完整性实体完整性也称为行完整性,是将行定义为特定表的唯一实体,即数据库中的所有行都具有一个非空且没有重复的主键值,这样就确保数据库中所代表的任何事物均不存在重复的条目。可以通过建立唯一的索引、PRIMARYKEY约束、UNIQUE约束或IDENTITY属性,强制表的标识符列、主键的完整性。例如:在记录xscj信息的student表中,每个学号都有一个唯一的编号,该编号的唯一性可以通过UNIQUE约束或PRIMARYKEY约束来实施。上一页下一页返回5.1数据完整性的重要作用5.1.2域完整性域完整性也称为列完整性,用以指定列的数据输入是否具有正确的数据类型、格式以及有效的数据范围(即数据的有效性)。用户可以通过限制数据类型,强制列的完整性规则;通过使用CHECK约束和规则,限制格式;通过FOREIGNKEY约束、CHECK约束、默认值定义、NOTNULL定义和规则,限制可能值的取值范围。例如:在course表中,将学分设置为4,就可以通过默认值定义来实现正确的取值。上一页下一页返回5.1数据完整性的重要作用5.1.3参照完整性

参照完整性又称为引用完整性。参照完整性保证主表(被参照表)中的数据与从表(参照表中数据的一致性。参照完整性确保键值在所有表中一致,这样的一致性使不存在的值不能被参照如果键值更改了,那么在整个数据库中,对该键值的所有参照都要进行一致的更改。

在sQLServer2012中,参照完整性通过外键与主键之间、外键与唯一键之间的关系来实现。

例如:average表中的课程号必须是course表中@有的课程号。

上一页下一页返回5.1数据完整性的重要作用

参照完整性将防止用户执行下列非法操作:1)在主表中没有关联的记录时,将记录添加或更改到相关表中。2)更改主表中的值,这会导致在相关表中生成孤立记录。3)从主表中删除记录,但仍存在与该记录匹配的相关记录5.1.4用户定义完整性

用户定义完整性允许用户定义不属于其他任何完整性类型的特定规则。所有的完整性类型都支持用户定义完整性。后面的章节中讲述的DML触发器等,就是为了实现这一完整性而设计的上一页返回5.2约束

约束是实现数据的强制完整性的标准机制,是SQLServer2012数据库实现强制数据完整性的重要方式。

建立和使用约束的目的是保证数据的完整性,约束是SQLServer2012强制实行的应用规则,它通过限制列中数据、行中数据和表之间数据来保证数据的完整性。

约束是依附于表结构的,并且作为数据库定义部分在CREATETABLE语句中声明,即可以在不改变表结构的基础上,通过ALTERTABLE语句进行添加或者删除。当表被删除时,表所带的所有约束定义也随之被删除。下一页返回5.2约束以下约束是SQLServer自动强制数据完整性的方式,即CHECK约束、PRIMARYKEY约束、FOREIGNKEY约束、UNIQUE约束及DEFAULT约束。5.2.1CHECK约束CHECK约束用于限制输入到一列或多列的值的范围,从逻辑表达式判断数据的有效性,也就是一个字段的输入内容必须满足CHECK约束的条件(否则数据无法正常输入),从而强制数据中数据的域完整性。上一页下一页返回5.2约束CHECK约束的使用遵循以下限制:1)列可以有多个CHECK约束,且约束条件中可以包含AND和OR的组合,列的多个CHECK约束按创建顺序进行验证。2)列上的CHECK约束只能限制被约束的列,当执行INSERT和DELETE语句时,CHECK约束和规则具有相同的数据验证功能。3)不能在数据类型为text}ntext或image的列上定义CHECK约束。上一页下一页返回5.2约束1界面方式建立、查看、修改和删除CHECK约束1)使用CHECK命令建立约束。【例5-1J在student表中建立一个性别为“男”或“女”的CHECK约束。操作步骤如下:展开“xscj”->“表”->“student”表、“设计”、单击右键,选择“S-SPX”列、单击右键、选中“check约束”、选择“添加”,打开CHECK约束,如图5一1所示。上一页下一页返回5.2约束在“CHECK约束”对话框中,在右侧网格的“表达式”、单击属性右侧的“省略号(…)”按钮,在弹出的对话框中,输入约束表达式“S_SPX=,男,OTS_SPX=’女”’,如图5-2所示。然后单击“确定”、“关闭”即可。这样一个名为“ck_student”的CHECK约束就建立成功了。2)使用CHECK命令查看、修改约束。【例5-2]查看、修改上例中的“ck_student”约束。上一页下一页返回5.2约束操作步骤如下:选中“student”表单击右键、在弹出的列表中选择“设计”、在左侧选中“S_SPX”单击右键、在弹出的列表中选择“CHECK约束”,就可打开图5一1所示的CHECK约束窗口进行查看和修改了。3)使用CHECK命令删除约束。要删除上述约束,请进入图5一1所示的CHECK约束窗口,选定要删除的约束,单击“删除”按钮,然后洗择“关闭”即可

上一页下一页返回5.2约束公使用命令方式建立CHECK约束CHECK约束的定义格式:[CONStRAINtconstrainname]CHECK(logicalexpression)

参数解释如下:

令constrain_name:约束名。

令logical一expression:逻辑表达式。1)利用Transact-SQL语句在创建表时建立CHECK约束。【例5-3】在创建student表的同时定义check约束,要求性别的取值为“男”或“女”,如图5一3所示。上一页下一页返回5.2约束【例5-4】在@建立的student表中,增加一个性别的CHECK约束,如图5-4所示。代码说明:执行后,在student信息表中建立了一个名为check_xb的CHECK约束,约束条件是“S_SeX=男ors_SeX=,女。3使用命令方式删除CHECK约束语法格式:DROPCONStRAINtconstraInname【例5-5】删除例5-4中建立的CHECK约束,如图5-5所示。上一页下一页返回5.2约束5.2.2PRIMEARYI}EY约束一般在sQLServer2012数据库中,保存数据的表都要设置PRIMARYKEY约束(即主键约束)。设置完主键约束的数据表将符合两项数据完整性规则:一是列不允许有空值,即指定的PRI-MARYKEY约束,将数据列隐式转换为NOTNULL约束;二是不能有重复的值。如果对具有重复值或允许有空值的列添加PRIMARYKEY约束,则数据库引擎将返回一个错误并且不添加约束。上一页下一页返回5.2约束1.使用界面方式建立和删除PRIMARYKEY约束1)使用界面方式建立PRIMARYKEY约束[例5-6】对student表,按s_no建立一个PRIMARYKEY约束(注:s_no在student中为唯一标识)。操作步骤如下:①在“对象资源管理器”中、找到“student”表,右击该表(图5一6)、选择“设计”命令。②打开表,然后右击要定义为主键的s_no列的行选择器,选择“设置主键”命令。此时,将自动创建名为“PK_student”的主键索引。上一页下一页返回5.2约束③用户可以在表中单击右键选择“索引/键”命令,然后可以在弹出的“索引/键”对话框中看到对应的索引。如图5-7所示,主键列为“条形码”列。2)使用界面方式删除PRIMARYKEY约束。打开student表后,右击定义为主键的条形码列的行选择器,然后选择“移除主键”命令,即删除了原来定义的主键设置。上一页下一页返回5.2约束公使用命令方式建立PRIMARYKEY约束PRIMARYKEY约束定义格式:[CONSTRAINTconsyrainname]PRIMARYKEYCLUStERED注:SQLServer自动为PRIMARYKEY约束的列建立一个索引。参数解释如下:令constrain_name:约束名。令CLUSTERED:列名。1)利用Transact-SQL语句在创建表时建立PRIMARYKEY约束。上一页下一页返回5.2约束【例5-7】创建studentl表时对条形码列同时定义PRIMARYKEY约束,如图5-8所示。代码说明:执行后,在新建的studentl表中建立了一个名为pk_primary的PRIMARYKEY约束,主键是2)利用Transact-SQL语句在修改表时创建PRIMARYKEY约束。【例5-8J对student表,按条形码建立一个PRIMARYKEY约束,如图5一9所示。上一页下一页返回5.2约束代码说明:1)执行后,在student表中建立了一个名为pk_xh的PRIMARYKEY约束,主键是“s_no".2)对于该结果,可在“对象资源管理器”中查看索引显示,如图5一10所示。1使用Transact-SQL语句删除PRIMARYKEY约束语法格式:DROPCONStRAINtconstrainname参数解释如下:令constrain_name:约束名。上一页下一页返回5.2约束【例5-9」对例5-8中建立的名为“pk-xh”的PRIMARYKEY约束进行删除,如图5-11所示代码说明:执行后,在student表中删除了名为pk_xh的PRIMARYKEY约束。5.2.3FOREIGNKEY约束外键是用于建立和加强两个表(主表与从表)数据之间关系的约束,它链接两表的一列或多列,当数据插入或删除时,通过参照完整性保证它们之间数据的一致性。定义表间参照关系:先定义主表的主键,再对从表定义外键约束。外键关系特性是关系型数据库二维表间关系的最重要的组成之一。上一页下一页返回5.2约束例如:student表有主键"s_no",average表中有主键“学号、课程号”。student表中s.故student表中n0对应aver-ale表中s_no,在average表中的sno必须是student表中@存在的s_nos_no是主键student表是主表;average表中s_no是外键,average阅表是从表;两表之间关系如图5一12所示。上一页下一页返回5.2约束1使用界面方式建立、删除FOREIGNKEY约束1)使用界面方式建立FOREIGNKEY约束。[例5一10]建立student表和average表的FOREIGNKEY约束。操作步骤如下:将“student”表中的“s_no”设为主键、将“average”表中的“学号、课程号”设为主键。对从表“average”进行打开“设计”的操作、选择“关系”命令、打开“外键关系”、单击“添加”按钮,如图5一13所示。上一页下一页返回5.2约束

注:①表中的INSERT和UPDATE规范指对在外键表中插入、删除或更新的数据应用该约束。如果外键表中存在匹配的行,还将禁止删除主表中的行。②表中的强制外键约束指在创建中检查现存数据或者在外键表上添加关系时,对数据库中@存在的数据应用该约束。③表中的强制用于复制指在将外键表复制到其他数据库时应用该约束。

单击属性右侧的“省略号(…)按钮”、弹出“表和列”对话框、从“主键表”中选择“student"表,及其“s_no”列、从“外键表”中选择“s_no”列(图5一14)、单击“确定”按钮。上一页下一页返回5.2约束当关闭表中的网格时,对关系的属性所做的任何更改将立即生效。单击“保存”按钮保存表,并在数据库中更改该约束。单击保存时出现图5一15所示的提示,单击“是”按钮即可完成外键的建立。注:外键建立好后,可以在“对象资源管理器”中查看从表的外键关系,外键显示为一个灰色的钥匙的图标,如图5一16所示。上一页下一页返回5.2约束2使用命令方式创建FOREIGNKEY约束1)在}i}建表时建立FOREIGNKEY约束。[例5一11】创建avera}el表时对sno列定义FOREIGNKEY约束,如图5一17所示。代码说明:执行后,在新建的average表中对sn。列进行了外键定义,要求与student表中的s_n。列相一致。2)在修改表时}I}建FOREIGNKEY约束。【例5-12」设在xscj数据库中@建立student表,并@定义s_no为主键,average表设为从表,现要为average的s_no添加FOREIGNKEY约束,如图5一18所示。上一页下一页返回5.2约束0使用命令方式删除FOREIGNKEY约束语法格式:DROPCONStRAINtconstraIn参数解释如下:令constrainnamename:外键约束名。【例5一13】对例5一12中建立的名为xh的FOREIGNKEY约束进行删除,如图5一19所示。上一页下一页返回5.2约束5.2.4UNIQUE约束UNIQUE约束也称为唯一约束。UNIQUE约束用于确保在非主键列中不输入重复的值。与PRIMARYKEY约束类似,UNIQUE约束也强制唯一性,为表中的一列或者多列提供实体完整性,且每个UNIQUE约束要建立一个唯一索引。UNIQUE约束和PRIMARYKEY约束的主要区别如下:1)UNIQUE约束用于非主键的一列或列组合。2)一个表可以定义多个UNIQUE约束,而只能定义一个PRIMARYKEY约束。3)UNIQUE约束可以用于定义允许空值的列,而PRIMARYKEY约束不能。上一页下一页返回5.2约束1.使用界面方式建立与删除UNIQUE约束1)建立UNIQUE约束。【例5一14」在course表中定义UNIQUE约束,要求表中“课程名”列的取值是唯一的。操作步骤如下:在“对象资源管理器”中的“xscj”数据库中、右击“course”表、选择“设计”命令、打开表设计器。右击表的行选择器、选择“索引/键”命令、打开“索引/键”对话框。在“索引/键”对话框中,单击“添加”按钮,然后在右侧网格中的“类型”选项中选择“唯一键”如图5一20所示。上一页下一页返回5.2约束2)删除UNIQUE约束。

在图5-20所示的“索引/键”对话框中,选中建立好的“IX_course"UNIQUE约束,单击“删除”按钮,即可删除该约束。公使用命令方式建立UNIQUE约束UNIQUE约束定义格式:[CONStRAINtconstrainname]UQUE[CLUSTERED]NONCLUSTERED](column])

参数解释如下:

令constrain一name;UNIQUE约束名。

令[CLUSTEREDINONCLUSTERED]:聚集或非聚集。

令columnn:列名。

上一页下一页返回5.2约束1)在创建表时建立UNIQUE约束。[例5一15]eel建coursel表时对c_name列定义UNIQUE约束,如图5一21所示。2)在修改表时定义UNIQUE约束。【例5-16}在course表中定义“c_name”列的取值为唯一,如图5-22所示。代码说明:执行后,即建立了一个名为IX_student的UNIQUE约束。上一页下一页返回5.2约束3.使用命令方式删除语法格式:DROPCONSTRAINTUNIQUE约束constraInname参数解释如下令constrainname:约束名。【例5一17】删除例5一16中名为IX_course的UNIQUE约束,如图5-23所示。上一页下一页返回5.2约束DEFAULT约束也称为默认约束。将表中某列定义了DEFAULT约束后,用户在插入新的数据行时,如果没有为该列指定数据值,那么系统会将默认值赋给该列。默认值可以是计算结果为常量的任何值,如常量、内置函数或数学表达式,当然默认值也可以是空值(NULL)。.使用界面方式建立与删除DEFAULT约束1)建立DEFAULT约束。【例5-18】为average表建立一个DEFAULT约束,要求“c_score”列的默认值为40上一页下一页返回5.2约束操作步骤如下:在“对象资源管理器”中右击“average”表、选择“设计”命令、打开表。在表中、选中“c_score”列、在其下方的列属性中,将“默认值或绑定”选项的值改为“4",如图5一24所示。在“对象资源管理器”中,该表的“约束”目录下,可以看到“DF_average_c_score”约束,如图5一25所示。上一页下一页返回5.2约束公使用命令方式创建DEFAULT约束DEFAULT约束定义格式:[CONStRAINtconstraintname]DEFAULTconstaintexpression

参数解释如下:

令constraint一name默认约束名。

令constaint一expression;默认约束值。1)在创建表时建立DEFAULT约束。

上一页下一页返回5.2约束[例5一19】eel建averagel表时对c_score列定义DEFAULT约束,如图5一26所示。

代码说明:

执行后,在新建的averagel表中对c_score列定义了一个默认约束,默认值为4。2)在修改表时定义DEFAULT约束。【例5-20】为例5一19中的average表建立一个“c_score”列的默认值为4的DEFAULT约束,如图5一27所示。

代码说明:

执行后,建立了一个名为dfc_score的默认约束。在不输入值的情况下,默认值为4。上一页下一页返回5.2约束3.使用命令方式删除DEFAULT约束语法格式:DROPCONStRAINtconstraintname参数解释如下:令constrain_name:约束名。【例5-21】删除例5-20中建立的一个名为,df_c_score的DEFAULT约束,如图5-28所示。上一页返回5.3默认

默认是一种数据库对象,可以绑定到一列或多列上,作用与DEFAULT约束相似,在插入数据行时,为没有指定数据的列提供事先定义的默认值。

默认对象在功能上与默认约束是一样的,但在使用上有所区别。默认约束是在创建表或修改表时定义并嵌入到被定义的表的结构中的,在删除表的同时默认约束也被删除。默认对象需要用CREATEDEFAULT语句进行定义,作为一种单独存储的数据库对象,它独立于表之外;创建默认对象后,需要将其绑定到某列或者用户自定义的数据类型上使用;删除表时并不能删除默认对象,而需要使用DROPDEFAULT语句删除默认对象。下一页返回5.3默认5.3.1创建默认对象使用Transact-SQL的CREATEDEFAULT语句创建默认对象语法格式:CREATEDEFAULTdefaultASconstantexpressIon

参数解释如下:

令default所建立的默认对象名称。默认值名称必须符合标识符的规则。可以选择是否指定默认值所有者名称。上一页下一页返回5.3默认

令constant_expression;默认对象的表达式。可以是任意常量、内置函数、算术表达式、数学表达式或者组合,但是不能包含任何列或其他数据库对象的名称。应用字符型或日期型常量数据时必须用单引号(’)括起来,二进制数据必须以Ox开头,货币型数据必须以美元符号($)开头。默认值必须与列数据类型相兼容。【例5-22】使用Transact-SQL语句创建一个值为“男”的默认对象JYsJ,如图5一29所示。代码说明:执行后,建立了一个名为“lYsl”的默认对象,默认对象的查询可在数据库中的可编程性对象中查询默认对象,如图5一30所示。上一页下一页返回5.3默认5.3.2绑定默认

默认对象创建后,并不能直接使用,必须首先将其绑定到表中某一列或者用户定义的数据类型上。绑定过程可以使用sp_bindefault存储过程来完成。

语法格式:SpbindefaultName【@defname】defaultnameectname【@futureonly】futureonlyflag上一页下一页返回5.3默认【例5一23】将例5-22中的默认对象jYsj绑定到xscj数据库的student表的S-SPX列上,如图5一31所示。代码说明:

执行后,默认对象jYsj绑定到了xscj数据库的student表的S-SPX列上,可在数据库中的可编程性对象中的默认值中单击“查看依赖关系”观察。

注:使用bindefault将一个新的默认对象绑定到列后,原有的默认对象就会被自动解除,只有最后一个被绑定的默认对象才有效。上一页下一页返回5.3默认5.3.3解除默认对象的绑定

语法格式:SpUnbindefault【defname一]’defaultname’【futureonly】futureonlyflag

参数解释如下:

令[@defname='default_name':是要解除默认值绑定的列或者用户定义数据类型的名称。当为用户定义数据类型解除默认值绑定时,所有属于该数据类型并具有相同默认值的列也同时解除默认值绑定。对属于该数据类型的列,如果其默认值直接绑定到列上,则该列不受影响。上一页下一页返回5.3默认【例5-24】将例5-23中的绑定解除,如图5-32所示。注:由于一列只能同时绑定一个默认对象,所以解除绑定时,不需要再指定默认对象的名称C另外,如果要查看默认值的文本,可以以该默认对象的名称为参数执行存储过程sp_helptext。上一页下一页返回5.3默认5.3.4删除默认对象

删除默认对象时,首先要确认默认对象的绑定@经解除,然后才能删除默认对象。

语法格式:DROPDEFAULT{defaultname}[wm]/*默认对象名称*/

参数解释如下:

令,default_name:是现有默认值的名称。若要查看现有默认值的列表,可以执行sp-help存储过程。n是表示可以指定多个默认值的占位符。【例5-25}将例5-24中的默认删除,如图5-33所示。上一页返回5.4规则

规则限制了可以存储在表中或者用户定义数据类型的值,它可以使用多种方式来完成对数据值的检验,既可以使用函数返回验证信息,也可以使用关键字BETWEEN,LIKE和IN完成对输入数据的检查。

规则也是一种独立的数据库对象,表中每列或者每个用户定义数据类型只能和一个规则绑定。

与默认的使用方法类似,规则的作用类似于CHECK约束,在插入数据行时,指定接受的数据值的范围。规则对象在功能上与CHECK约束是一样的,但在使用上有所区别。CHECK约束是在创建表或修改表时定义并嵌入到被定义的表的结构中的,在删除表的同时CHECK约束也被删除。下一页返回5.4规则5.4.1创建规则使用Transact-SQL的CREATERULE语句创建规则语法格式:CREATERULErulenameASconditionexpression参数解释如下:令rule_name:是所建立的规则名称。上一页下一页返回5.4规则

令condition_expression:是定义规则条件。规则可以是WHERE子句中任何有效的表达式,且表达式可以是不引用数据库对象的内置函数、算术表达式、数学表达式或者组合,但是不能包含任何列或其他数据库对象。若表达式中包含一个变量,则每个局部变量前面都要有@符号。【例5-26】创建一个新规则,限定输入到该规则所绑定的列中的实际值只能是该规则中限定的值,如图5一34所示。代码说明:执行后,限定输入的值只能是1一8的数值。上一页下一页返回5.4规则5.4.2绑定规则

与默认对象一样,规则在创建后,并不能直接使用,必须首先将其绑定到表中某一列或者用户定义的数据类型上。绑定过程可以使用sp_bindrule存储过程来完成。

语法格式:Spbindrule【rulename】ruleneme’;【name】ectname’【futureonly】futureonlyflag】上一页下一页返回5.4规则参数解释如下:令[@rulename='rule_name':由CREATERULE语句仓l}建的规则名称。令[@objname='object_name':要绑定规则的列名称或用户定义的数据类型。若绑定的是规则的列名,则绑定的object_name为“表名.列名”格式,表明其为列名;若object_name没有采取“表名.列名”格式,则认为它属于用户定义的数据类型,用户定义数据类型的现有列继承rule。上一页下一页返回5.4规则【例5-27]将例5-26中的规则xq绑定到xscj数据库的curse表的c-term列上,如图5一35所示代码说明:执行后,在course表中的c_term列上只能输入1-8的数值。注:如果列同时绑定有默认对象和规则,则默认对象必须满足规则的定义。与规则冲突的默认对象将无法插入列。上一页下一页返回5.4规

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论