首页 理论教育 数据库基础与应用-SQLServer2005约束管理及作用

数据库基础与应用-SQLServer2005约束管理及作用

时间:2023-11-04 理论教育 版权反馈
【摘要】:表2-13描述了各类约束的作用。表2-13 各类约束的作用1.PRIMARY KEY约束数据表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。1)在企业管理器中展开服务器组,然后展开一个服务器。使用企业管理器创建FOREIGN KEY约束在企业管理器中可以利用关系图来创建FOREIGN KEY约束,分为两种情况:一种情况是在创建表时设置外键,另一种情况是在已经存在的表中创建外键。

数据库基础与应用-SQLServer2005约束管理及作用

SQL Server的 约 束 包 括PRIMARY KEY、FOREIGN KEY、DEFAULT、UNIQUE和CHECK,用户可以根据自己的需要确定使用哪个约束。表2-13描述了各类约束的作用。

表2-13 各类约束的作用

978-7-111-36808-3-Chapter02-172.jpg

1.PRIMARY KEY约束

数据表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义PRIMARY KEY约束来创建主键。

一个表只能有一个PRIMARY KEY约束,而且PRIMARY KEY约束中的列不能接受空值。由于PRIMARY KEY约束可以确保数据的唯一性,所以经常用它来定义标识列。

当为表指定PRIMARY KEY约束时,SQL Server 2005通过为主键列创建唯一索引强制数据的唯一性。在查询中使用主键时,该索引还可用来对数据进行快速访问。

如果PRIMARY KEY约束定义在不止一列上,则一列中的值可以重复,但PRIMARY KEY约束定义中的所有列的组合的值必须唯一。

(1)使用企业管理器创建PRIMARY KEY约束

下面在“学生基本情况表”中设置PRIMARY KEY约束。由于“学生基本情况表”是一个已经存在的数据库对象,所以需要通过修改表结构的方法来设置PRIMARY KEY约束。

1)在企业管理器中展开服务器组,然后展开一个服务器。

2)展开目标数据库并在该数据库下面单击“表”节点,使该数据库中包含的表对象显示在详细信息窗格中。

3)使用鼠标右键单击要添加PRIMARY KEY约束的表,然后在弹出的快捷菜单中选择“设计表”命令,如图2-77所示。

978-7-111-36808-3-Chapter02-173.jpg

图2-77 选择“设计表”命令

4)在表设计器中单击要设置为主键的字段(本例中是“学号”),然后在工具栏上单击“设置主键”图标按钮978-7-111-36808-3-Chapter02-174.jpg,使之处于“凹陷”状态,此时该字段左边的选择栏将出现一个钥匙标记978-7-111-36808-3-Chapter02-175.jpg,表明该字段是表中的主键字段,如图2-78所示。

978-7-111-36808-3-Chapter02-176.jpg

图2-78 在表设计器中设置PRIMARY KEY约束

5)至此,已经将“学号”字段设置为主键,单击“保存”图形按钮978-7-111-36808-3-Chapter02-177.jpg,将所做的修改保存到数据库中,关闭表设计器窗口。

(2)使用CREATE TABLE语句创建PRIMARY KEY约束

除了在企业管理器中设置PRIMARY KEY约束外,也可以在CREATE TABLE语句中添加一个PRIMARY KEY子句来设置PRIMARY KEY约束。语法格式如下:

978-7-111-36808-3-Chapter02-178.jpg

使用CONSTRAINT关键字时,可以显式地对约束命名;如果省略这个关键字,则由系统自动对约束命名。主键具有索引作用,用来实现对表内数据的快速查询,索引类型可以是CLUSTERED(聚集的)或NON CLUSTERED(非聚集的),默认类型为CLUSTERED。

如果用单个字段作为主键,直接在该字段定义中加入PRIMARY KEY子句,不指定字段名,这是一种字段级约束;如果用几个字段的组合作为主键,在各个字段定义后面加上PRIMARY KEY子句,并指定组成主键的各个字段名(一个主键最多可以由16个字段组成),这时约束将属于表级约束。

例2-75 用CREATE TABLE语句实现将“学号”和“课程编号”两个字段的组合设置为“成绩表”的主键。

978-7-111-36808-3-Chapter02-179.jpg

2.FOREIGN KEY约束

外键是用于建立和加强两个表数据之间的连接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的连接。这个列就成为第二个表的外键。

外键在关系数据库中的意义如下。

桥梁作用:外键提供了两个表之间的连接。

●体现参照完整性:外键通过强制外键字段的取值必须是另外表中主键字段的有效值

从而实施参照完整性。

(1)使用企业管理器创建FOREIGN KEY约束

在企业管理器中可以利用关系图来创建FOREIGN KEY约束,分为两种情况:一种情况是在创建表时设置外键,另一种情况是在已经存在的表中创建外键。

1)确定外键表和主键表,外键字段和主键字段的数据类型应匹配,字段长度应相等,字段名称可以相同也可以不同,两个表必须位于同一个数据库内。本例选择“学生管理数据库”数据库中的“学生基本情况表”和“成绩表”分别作为主键表和外键表。

2)在企业管理器中展开服务器组,然后展开一个服务器。

3)展开外键表和主键表所在的数据库并在该数据库下面单击“关系图”节点,使该数据库中包含的数据库图显示在详细信息窗格中,然后使用鼠标右键单击详细信息窗格的空白处,在弹出的快捷菜单中选择“新建数据库关系图”命令,如图2-79所示。

978-7-111-36808-3-Chapter02-180.jpg

图2-79 选择“新建数据库关系图”命令

4)当出现“创建数据库图向导”的初始画面时,单击“取消”按钮,直接进入数据库关系图设计窗口。

5)单击工具栏上的“在关系图上添加表”图形按钮978-7-111-36808-3-Chapter02-181.jpg,或在关系图设计窗口的空白处单击鼠标右键,在弹出的快捷菜单中选择“添加表”命令,如图2-80所示。

978-7-111-36808-3-Chapter02-182.jpg

图2-80 选择“添加表”命令

6)当出现如图2-81所示的“添加表”对话框时,按住<Ctrl>键的同时依次单击主键表和外键表名称,然后单击“添加”按钮,将主键表和外键表添加到数据库关系图设计器窗口中。

7)用鼠标指针指向主键表中主键字段左边的选择栏,然后按下鼠标左键并向外键表中的外键字段处拖动,如图2-82所示。

978-7-111-36808-3-Chapter02-183.jpg

图2-81 “添加表”对话框

978-7-111-36808-3-Chapter02-184.jpg

图2-82 将主键字段拖向外键字段

8)此时将出现“创建关系”对话框,如图2-83所示,列出了当前所选择的主键和外键。如不符合要求,还可以在列表中重新选择。“关系名”文本框中显示的是系统所给出的关系名。用户可以自己对关系进行重命名。另外,还有3个复选框,用户可以根据实际需要进行选择。

9)单击“确定”按钮,则在当前数据库关系图中创建这个关系,此时在主键表和外键表之间将会出现一根连接线,表明这两个表已经关联起来,如图2-84所示。

978-7-111-36808-3-Chapter02-185.jpg

图2-83 “创建关系”对话框

978-7-111-36808-3-Chapter02-186.jpg

图2-84 在“学生基本情况表”和“成绩表”之间建立关系

10)最后在工具栏上单击“保存”按钮,然后在“另存为…”对话框中输入数据库关系图的名称(如fk_xs_cj)并单击“确定”按钮。关闭数据库图设计窗口,此时在右边的详细信息窗格中将看到新创建的数据库关系图,如图2-85所示。

978-7-111-36808-3-Chapter02-187.jpg

图2-85 查看数据库关系图

(2)使用CREATE TABLE语句创建FOREIGN KEY约束

当创建或更改表时可通过定义FOREIGN KEY约束来创建外键约束。语法格式如下:

978-7-111-36808-3-Chapter02-188.jpg

需要说明的是:

●一旦FOREIGN KEY约束定义了某个字段,则该字段的取值必须参照同一个表或者另一个表中的PRIMARY KEY约束或UNIQUE约束。

●在CREATE TABLE或ALTER TABLE语句中,通过使用参照来声明FOREIGN KEY约束。

注意:FOREIGN KEY约束不能自动建立索引。(www.xing528.com)

例2-76 用CREATE TABLE语句创建成绩表,并将学生表的xh字段和课程表的kch设置为成绩表的外键。

978-7-111-36808-3-Chapter02-189.jpg

3.DEFAULT约束

DEFAULT约束的作用是当用户没有为定义DEFAULT约束的字段输入数据时,由DE-FAULT约束提供默认的数据。

实现DEFAULT约束时应该注意:

●每一个字段只能有一个DEFAULT约束

●DEFAULT约束不能放在IDENTITY字段或者timestamp字段上,因为这两种字段均能

自动插入数据,所以即使有DEFAULT约束也没有任何意义。

(1)使用企业管理器创建DEFAULT约束

在企业管理器中,利用表设计窗口创建或修改表时,如要对某个字段设置默认值,可以单击该字段,然后在窗口下部的“默认值”文本框中输入一个数据作为其默认值,如图2-86所示。

978-7-111-36808-3-Chapter02-190.jpg

图2-86 利用企业管理器设置性别字段的默认值为“男”

(2)使用CREATE TABLE语句创建DEFAULT约束,用ALTER TABLE语句来修改DE-FAULT约束

使用ALTER TABLE语句修改表时,可以通过DEFAULT子句来为指定的字段设置默认值,该子句的语法格式如下:

978-7-111-36808-3-Chapter02-191.jpg

其中的参数含义可参考前面的ALTER TABLE语句的参数解释。

例2-77 将成绩表的score字段的DEFAULT约束设置为0。

978-7-111-36808-3-Chapter02-192.jpg

4.UNIQUE约束

UNIQUE约束即唯一性约束,用于保证表中每条记录的唯一性。这里需要说明的是,虽然主键值在表范围内具有唯一性,但在一个表中只能设置一个主键,除了主键以外,如果还要求其他非主键字段或字段组合也具有唯一性,希望系统对用户输入进行唯一性检查,就应对这些字段设置UNIQUE约束。

(1)使用企业管理器创建UNIQUE约束

在表设计器中创建或修改表时,可以利用“属性”对话框来设置UNIQUE约束。具体步骤如下:

1)在企业管理器中展开服务器组,然后展开一个服务器。

2)展开目标数据库并在该数据库下面单击“表”节点,使该数据库中包含的表对象显示在详细信息窗格中。

3)鼠标右键单击要添加UNIQUE约束的表,然后在弹出的快捷菜单中选择“设计表”命令,以打开表设计器窗口。

4)鼠标右键单击任意一个字段所在的行,然后在弹出的快捷菜单中选择“属性”命令。

5)当出现“属性”对话框时,选择“索引/键”选项卡,然后单击“新建”按钮,为表创建新的约束或索引。

6)在“列名”列中选择要施加UNIQUE约束的字段,然后选中“创建UNIQUE”复选框并单击“约束”单选按钮,如图2-87所示。

978-7-111-36808-3-Chapter02-193.jpg

图2-87 “索引/键”选项卡

7)单击“关闭”按钮,返回到表设计器窗口。

(2)使用CREATE TABLE语句和ALTER TABLE创建UNIQUE约束

使用CREATE TABLE语句和ALTER TABLE创建表的约束时,可以通过UNIQUE子句来设置唯一性约束,该子句的语法格式是:

978-7-111-36808-3-Chapter02-194.jpg

例2-78 为学生表的xh列设置唯一性约束。

978-7-111-36808-3-Chapter02-195.jpg

978-7-111-36808-3-Chapter02-196.jpg

5.CHECK约束

CHECK约束通过限制输入到列中的值来强制域的完整性。这与FOREIGN KEY约束控制列中数值相似。区别在于它们如何判断哪些值有效:FOREIGN KEY约束从另一个表中获得有效数值列表,CHECK约束从逻辑表达式判断而非基于其他列的数据。例如,通过创建CHECK约束可将“成绩”列的取值范围限制在0~100之间,从而防止输入的成绩值超出正常的成绩范围。

在企业管理器中可以利用表属性对话框来创建CHECK约束,分为两种情况:一种情况是在创建表时设置CHECK约束,另一种情况是在已经存在的表中添加CHECK约束。下面以“成绩表”为例来介绍如何在已经存在的表中添加CHECK约束。

1)在企业管理器中展开服务器组,然后展开一个服务器。

2)展开目标数据库并在该数据库下面单击“表”节点,使该数据库中包含的表对象显示在详细信息窗格中。

3)鼠标右键单击要添加CHECK约束的表,在弹出的快捷菜单中选择“设计表”命令,打开表设计器窗口。

4)鼠标右键单击表设计器窗口,然后在弹出的快捷菜单中选择“CHECK约束”命令,如图2-88所示。

978-7-111-36808-3-Chapter02-197.jpg

图2-88 选择“CHECK约束”命令

5)在图2-89所示的“CHECK约束”选项卡中单击“新建”按钮,为所选取的表创建一个CHECK约束,然后在“约束表达式”框中输入一个条件表达式。例如,可以对“成绩表”中的“成绩”字段设置以下约束条件:

978-7-111-36808-3-Chapter02-198.jpg

6)用户可以在“约束名”文本框中为新建的约束重命名。

7)单击“关闭”按钮,返回到表设计器窗口。

至此,“成绩”字段已经设置了一个CHECK约束。在成绩表中录入或修改记录时,如果在“成绩”字段中输入了小于0或大于100的数值,将违反CHECK约束指定的条件,此时会出现错误提示,如图2-90所示。

978-7-111-36808-3-Chapter02-199.jpg

图2-89 为所选择的表创建CHECK约束

978-7-111-36808-3-Chapter02-200.jpg

图2-90 违反CHECK约束时出现的错误提示信息

同样可以在使用CREATE TABLE语句创建表时通过CHECK子句来设置CHECK约束,该子句的语法格式是:

978-7-111-36808-3-Chapter02-201.jpg

例2-79 将学生表的age列限制为0~100之间,sex列限制为“男”或者“女”。

978-7-111-36808-3-Chapter02-202.jpg

6.约束的删除

如果需要将某个约束删除,可以使用ALTER TABLE语句。语法格式如下:

978-7-111-36808-3-Chapter02-203.jpg

例2-80 将学生表的xxx约束删除。

978-7-111-36808-3-Chapter02-204.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈