SQL Server的 约 束 包 括PRIMARY KEY、FOREIGN KEY、DEFAULT、UNIQUE和CHECK,用户可以根据自己的需要确定使用哪个约束。表2-13描述了各类约束的作用。
表2-13 各类约束的作用
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所示。
图2-77 选择“设计表”命令
4)在表设计器中单击要设置为主键的字段(本例中是“学号”),然后在工具栏上单击“设置主键”图标按钮,使之处于“凹陷”状态,此时该字段左边的选择栏将出现一个钥匙标记,表明该字段是表中的主键字段,如图2-78所示。
图2-78 在表设计器中设置PRIMARY KEY约束
5)至此,已经将“学号”字段设置为主键,单击“保存”图形按钮,将所做的修改保存到数据库中,关闭表设计器窗口。
(2)使用CREATE TABLE语句创建PRIMARY KEY约束
除了在企业管理器中设置PRIMARY KEY约束外,也可以在CREATE TABLE语句中添加一个PRIMARY KEY子句来设置PRIMARY KEY约束。语法格式如下:
使用CONSTRAINT关键字时,可以显式地对约束命名;如果省略这个关键字,则由系统自动对约束命名。主键具有索引作用,用来实现对表内数据的快速查询,索引类型可以是CLUSTERED(聚集的)或NON CLUSTERED(非聚集的),默认类型为CLUSTERED。
如果用单个字段作为主键,直接在该字段定义中加入PRIMARY KEY子句,不指定字段名,这是一种字段级约束;如果用几个字段的组合作为主键,在各个字段定义后面加上PRIMARY KEY子句,并指定组成主键的各个字段名(一个主键最多可以由16个字段组成),这时约束将属于表级约束。
例2-75 用CREATE TABLE语句实现将“学号”和“课程编号”两个字段的组合设置为“成绩表”的主键。
2.FOREIGN KEY约束
外键是用于建立和加强两个表数据之间的连接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的连接。这个列就成为第二个表的外键。
外键在关系数据库中的意义如下。
●桥梁作用:外键提供了两个表之间的连接。
●体现参照完整性:外键通过强制外键字段的取值必须是另外表中主键字段的有效值,
从而实施参照完整性。
(1)使用企业管理器创建FOREIGN KEY约束
在企业管理器中可以利用关系图来创建FOREIGN KEY约束,分为两种情况:一种情况是在创建表时设置外键,另一种情况是在已经存在的表中创建外键。
1)确定外键表和主键表,外键字段和主键字段的数据类型应匹配,字段长度应相等,字段名称可以相同也可以不同,两个表必须位于同一个数据库内。本例选择“学生管理数据库”数据库中的“学生基本情况表”和“成绩表”分别作为主键表和外键表。
2)在企业管理器中展开服务器组,然后展开一个服务器。
3)展开外键表和主键表所在的数据库并在该数据库下面单击“关系图”节点,使该数据库中包含的数据库图显示在详细信息窗格中,然后使用鼠标右键单击详细信息窗格的空白处,在弹出的快捷菜单中选择“新建数据库关系图”命令,如图2-79所示。
图2-79 选择“新建数据库关系图”命令
4)当出现“创建数据库图向导”的初始画面时,单击“取消”按钮,直接进入数据库关系图设计窗口。
5)单击工具栏上的“在关系图上添加表”图形按钮,或在关系图设计窗口的空白处单击鼠标右键,在弹出的快捷菜单中选择“添加表”命令,如图2-80所示。
图2-80 选择“添加表”命令
6)当出现如图2-81所示的“添加表”对话框时,按住<Ctrl>键的同时依次单击主键表和外键表名称,然后单击“添加”按钮,将主键表和外键表添加到数据库关系图设计器窗口中。
7)用鼠标指针指向主键表中主键字段左边的选择栏,然后按下鼠标左键并向外键表中的外键字段处拖动,如图2-82所示。
图2-81 “添加表”对话框
图2-82 将主键字段拖向外键字段
8)此时将出现“创建关系”对话框,如图2-83所示,列出了当前所选择的主键和外键。如不符合要求,还可以在列表中重新选择。“关系名”文本框中显示的是系统所给出的关系名。用户可以自己对关系进行重命名。另外,还有3个复选框,用户可以根据实际需要进行选择。
9)单击“确定”按钮,则在当前数据库关系图中创建这个关系,此时在主键表和外键表之间将会出现一根连接线,表明这两个表已经关联起来,如图2-84所示。
图2-83 “创建关系”对话框
图2-84 在“学生基本情况表”和“成绩表”之间建立关系
10)最后在工具栏上单击“保存”按钮,然后在“另存为…”对话框中输入数据库关系图的名称(如fk_xs_cj)并单击“确定”按钮。关闭数据库图设计窗口,此时在右边的详细信息窗格中将看到新创建的数据库关系图,如图2-85所示。
图2-85 查看数据库关系图
(2)使用CREATE TABLE语句创建FOREIGN KEY约束
当创建或更改表时可通过定义FOREIGN KEY约束来创建外键约束。语法格式如下:
需要说明的是:
●一旦FOREIGN KEY约束定义了某个字段,则该字段的取值必须参照同一个表或者另一个表中的PRIMARY KEY约束或UNIQUE约束。
●在CREATE TABLE或ALTER TABLE语句中,通过使用参照来声明FOREIGN KEY约束。
注意:FOREIGN KEY约束不能自动建立索引。(www.xing528.com)
例2-76 用CREATE TABLE语句创建成绩表,并将学生表的xh字段和课程表的kch设置为成绩表的外键。
3.DEFAULT约束
DEFAULT约束的作用是当用户没有为定义DEFAULT约束的字段输入数据时,由DE-FAULT约束提供默认的数据。
实现DEFAULT约束时应该注意:
●每一个字段只能有一个DEFAULT约束
●DEFAULT约束不能放在IDENTITY字段或者timestamp字段上,因为这两种字段均能
自动插入数据,所以即使有DEFAULT约束也没有任何意义。
(1)使用企业管理器创建DEFAULT约束
在企业管理器中,利用表设计窗口创建或修改表时,如要对某个字段设置默认值,可以单击该字段,然后在窗口下部的“默认值”文本框中输入一个数据作为其默认值,如图2-86所示。
图2-86 利用企业管理器设置性别字段的默认值为“男”
(2)使用CREATE TABLE语句创建DEFAULT约束,用ALTER TABLE语句来修改DE-FAULT约束
使用ALTER TABLE语句修改表时,可以通过DEFAULT子句来为指定的字段设置默认值,该子句的语法格式如下:
其中的参数含义可参考前面的ALTER TABLE语句的参数解释。
例2-77 将成绩表的score字段的DEFAULT约束设置为0。
4.UNIQUE约束
UNIQUE约束即唯一性约束,用于保证表中每条记录的唯一性。这里需要说明的是,虽然主键值在表范围内具有唯一性,但在一个表中只能设置一个主键,除了主键以外,如果还要求其他非主键字段或字段组合也具有唯一性,希望系统对用户输入进行唯一性检查,就应对这些字段设置UNIQUE约束。
(1)使用企业管理器创建UNIQUE约束
在表设计器中创建或修改表时,可以利用“属性”对话框来设置UNIQUE约束。具体步骤如下:
1)在企业管理器中展开服务器组,然后展开一个服务器。
2)展开目标数据库并在该数据库下面单击“表”节点,使该数据库中包含的表对象显示在详细信息窗格中。
3)鼠标右键单击要添加UNIQUE约束的表,然后在弹出的快捷菜单中选择“设计表”命令,以打开表设计器窗口。
4)鼠标右键单击任意一个字段所在的行,然后在弹出的快捷菜单中选择“属性”命令。
5)当出现“属性”对话框时,选择“索引/键”选项卡,然后单击“新建”按钮,为表创建新的约束或索引。
6)在“列名”列中选择要施加UNIQUE约束的字段,然后选中“创建UNIQUE”复选框并单击“约束”单选按钮,如图2-87所示。
图2-87 “索引/键”选项卡
7)单击“关闭”按钮,返回到表设计器窗口。
(2)使用CREATE TABLE语句和ALTER TABLE创建UNIQUE约束
使用CREATE TABLE语句和ALTER TABLE创建表的约束时,可以通过UNIQUE子句来设置唯一性约束,该子句的语法格式是:
例2-78 为学生表的xh列设置唯一性约束。
5.CHECK约束
CHECK约束通过限制输入到列中的值来强制域的完整性。这与FOREIGN KEY约束控制列中数值相似。区别在于它们如何判断哪些值有效:FOREIGN KEY约束从另一个表中获得有效数值列表,CHECK约束从逻辑表达式判断而非基于其他列的数据。例如,通过创建CHECK约束可将“成绩”列的取值范围限制在0~100之间,从而防止输入的成绩值超出正常的成绩范围。
在企业管理器中可以利用表属性对话框来创建CHECK约束,分为两种情况:一种情况是在创建表时设置CHECK约束,另一种情况是在已经存在的表中添加CHECK约束。下面以“成绩表”为例来介绍如何在已经存在的表中添加CHECK约束。
1)在企业管理器中展开服务器组,然后展开一个服务器。
2)展开目标数据库并在该数据库下面单击“表”节点,使该数据库中包含的表对象显示在详细信息窗格中。
3)鼠标右键单击要添加CHECK约束的表,在弹出的快捷菜单中选择“设计表”命令,打开表设计器窗口。
4)鼠标右键单击表设计器窗口,然后在弹出的快捷菜单中选择“CHECK约束”命令,如图2-88所示。
图2-88 选择“CHECK约束”命令
5)在图2-89所示的“CHECK约束”选项卡中单击“新建”按钮,为所选取的表创建一个CHECK约束,然后在“约束表达式”框中输入一个条件表达式。例如,可以对“成绩表”中的“成绩”字段设置以下约束条件:
6)用户可以在“约束名”文本框中为新建的约束重命名。
7)单击“关闭”按钮,返回到表设计器窗口。
至此,“成绩”字段已经设置了一个CHECK约束。在成绩表中录入或修改记录时,如果在“成绩”字段中输入了小于0或大于100的数值,将违反CHECK约束指定的条件,此时会出现错误提示,如图2-90所示。
图2-89 为所选择的表创建CHECK约束
图2-90 违反CHECK约束时出现的错误提示信息
同样可以在使用CREATE TABLE语句创建表时通过CHECK子句来设置CHECK约束,该子句的语法格式是:
例2-79 将学生表的age列限制为0~100之间,sex列限制为“男”或者“女”。
6.约束的删除
如果需要将某个约束删除,可以使用ALTER TABLE语句。语法格式如下:
例2-80 将学生表的xxx约束删除。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。