




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第1010章章 约束约束l在数据库的设计和管理的过程中,维护数据完整性是一项重要的工作。数据完整性关系到数据库中数据的精确性、可用性。本章将详细介绍数据库的完整性含义和实现数据完整性的方式,即定义约束的具体操作。10.1 10.1 约束概述约束概述l在数据库管理系统中,保证数据库中的数据完整性是非常重要的。数据完整性,是指存储在数据库中数据的一致性、正确性、精确性和可用性。约束是SQL Server 2008数据库实现数据的强制完整性的标准机制。本节将对约束的概念做一说明。10.1.1 10.1.1 数据完整性数据完整性l数据完整性对于数据管理信息系统是十分重要,因为数据的完整,是用户使用和
2、管理数据库的基础。完整的数据,为客户提供可用的数据服务。数据完整性,主要是指数据的一致性和正确性。在SQL Server2008数据库中,根据数据完整性涉及方式的不同,它所作用的数据库对象和范围也不同,可以将数据完整性分为实体完整性、域完整性、引用完整性和用户定义完整性。10.1.2 10.1.2 约束的概念和类型约束的概念和类型l约束是实现强制数据完整的ANSI标准的方法,是SQL Server 2008数据库实现强制数据完整性的重要方式。约束确保合法的数据值存入数据列中,并满足表间的约束关系。SQL Server 2008提供了下列机制,以强制数据的完整性。10.2 10.2 设计约束设计
3、约束l本节将讲述约束的设置和具体的操作。这包括使用SQL Server Management Studio工具建立主键约束、外键约束、UNIQUE约束、默认值等,通过本节的讲述,用户可以深入理解约束的使用,并可以对数据进行强制完整性的基础维护。10.2.1 10.2.1 定义约束的方式定义约束的方式l定义约束的方式有许多种,指定PRIMARY KEY、FOREIGN KEY、UNIQUE或CHECK等约束,可以使用ALTER TABLE添加到表中的新列定义中;也可以使用SQL Server Management Studio图形工具为数据列、表增加约束。l用户可以使用SQL Server Ma
4、nagement Studio工具定义约束,也可以通过T-SQL脚本实现约束的创建和修改删除等工作。10.2.2 10.2.2 定义约束的语法结构定义约束的语法结构l指定PRIMARY KEY、FOREIGN KEY、UNIQUE或CHECK约束的属性,可以通过ALTER TABLE的语句添加到表中的定义,这种方式也可以在CREATE TABLE操作的同时实现。10.3 10.3 主键约束主键约束l一般在SQL Server 2008数据库中,保存数据的表都要设置主键。设置完主键约束的数据表将符合两项数据完整性规则:一是列不允许有空值,即指定的PRIMARY KEY约束,将数据列隐式转换为NO
5、T NULL约束。二是不能有重复的值。如果对具有重复值或允许有空值的列添加PRIMARY KEY约束,则数据库引擎将返回一个错误并且不添加约束。10.3.1 10.3.1 一个主键约束的示例一个主键约束的示例l示例1:在AdventureWorks数据库中,几乎所有的数据表都有主键约束,可以通过以下步骤查看示例数据库中dbo.DatabaseLog数据表的主键约束l(1)单击“开始|所有程序|Microsoft SQL Server 2008|SQL Server Management Studio”命令,启动SQL Server Management Studio工具。l(2)在“对象资源管
6、理器”中,连接到SQL Server 2008数据库引擎实例,再展开该实例。l(3)在“对象资源管理器”中,展开AdventureWorks数据库节点,在表目录下的dbo.DatabaseLog数据表目录下,找到“键”节点,展开该节点,就可以看到“PK_DatabaseLog_DatabaseLogID”键。注意该节点以“金色的钥匙”图标表示该键为数据表的主键。l(4)双击该节点,打开数据表设计器。在表设计器中,可以看到该表的主键是“DatabaseLogID”为数字型,表示为在列选择器处显示为“金色的钥匙”的图标。10.3.2 10.3.2 使用表设计器定义主键约束使用表设计器定义主键约束l
7、用户可以使用SQL Server Management Studio工具为数据表建立主键约束,使用表设计器建立主键约束的过程如下。l(1)单击“开始|所有程序|Microsoft SQL Server 2008|SQL Server Management Studio”命令,启动SQL Server Management Studio工具。l(2)在“对象资源管理器”中,连接到SQL Server 2008数据库引擎实例,再展开该实例。l(3)在“对象资源管理器”中,找到要建立主键的数据表(如果是新建数据表,可在新建时打开),选择“设计”菜单命令。l(4)打开表设计器后,单击要定义为主键的数据
8、库列的行选择器。若要选择多个列,请在按住Ctrl键的同时单击其他列的行选择器。l(5)右击该列的行选择器,然后选择“设置主键”菜单命令。此时,将自动创建名为“PK_”(后跟表名)的主键索引,用户可以在“索引/键”对话框中看到对应的索引。l(6)查看该键,在表设计器中,右键选择“索引/键”菜单命令,弹出“索引/键”对话框。可以在左侧的列表框中看到以“PK_”开头的主键名。其右侧网格中列出该“主键”的主要信息,如AdventureWorks数据库的“dbo.DatabaseLog”数据表,主键列为“DatabaseLogID”列。10.3.3 10.3.3 使用使用T-SQLT-SQL定义主键约束
9、定义主键约束l示例:以下示例在CREATE TABLE语句中,使用PRIMARY KEY NONCLUSTERED关键字为数据表定义非聚集的主键约束l(1)单击“开始|所有程序|Microsoft SQL Server 2008|SQL Server Management Studio”菜单命令,启动SQL Server Management Studio工具。l(2)在SQL Server Management Studio工具中,单击“新建查询”按钮,弹出一个“新建查询”对话框。l(3)在查询编辑器中,录入代码,单击“执行”按钮。10.4 10.4 外键约束外键约束l外键是用于建立和加强两
10、个表数据之间关系的约束,它链接两表的一列或多列。通过将数据表中主键值的列添加到另一个数据表中,可创建两个表之间的关系。这个主键列就成为第二个表的外键。一般表现为两个数据表中,一张数据表的某一列的所有值,全部取自另外一张表的主键值。外键关系特性是关系型数据库二维表间关系的最重要的组成之一。l例如,因为销售订单和销售人员之间存在一种逻辑关系,所以AdventureWorks数据库中的 Sales.SalesOrderHeader 表含有一个指向 Sales.SalesPerson 表的链接。SalesOrderHeader 表中的 SalesPersonID 列与 SalesPerson 表中的主
11、键列相对应。SalesOrderHeader 表中的 SalesPersonID 列是指向 SalesPerson 表的外键。10.4.1 10.4.1 一个外键约束的示例一个外键约束的示例l示例:在AdventureWorks数据库中,许多数据表都有外键约束,可以通过以下步骤查看示例数据库中Production.Product数据表的外键约束l(1)单击“开始|所有程序|Microsoft SQL Server 2008|SQL Server Management Studio”命令,启动SQL Server Management Studio工具。l(2)在“对象资源管理器”中,连接到SQ
12、L Server 2008数据库引擎实例,再展开该实例。l(3)在“对象资源管理器”中,展开数据库目录,“AdventureWorks”数据库节点,在表目录下的Production.Product数据表目录下,找到“键”节点,展开该节点,就可以看到“FK_Product_ProductModel_ProductModelID”键。l(4)双击该节点,打开外键关系对话框。l(5)在“外键关系”对话框中,单击右则“表和列规范”项,单击出现的()按钮。l(6)弹出“表和列”对话框。例如,Product.Production的FK_Product_ProductModel_ProductModelID
13、外键关系,ProductModel表的主键ProductModelID,在Production中的ProductModelID为外键。10.4.2 10.4.2 使用表设计器定义外键约束使用表设计器定义外键约束l示例:用户可以使用表设计器定义外键约束,具体的操作可以参考如下步骤实现(1)单击“开始|所有程序|Microsoft SQL Server 2008|SQL Server Management Studio”命令,启动SQL Server Management Studio工具。在SQL Server Management Studio工具中,单击“新建查询”按钮,打开一个“新建查询”
14、窗口。(2)在查询窗口中,输入代码。(3)在SQL Server Management Studio工具“对象资源管理器”数据表列表中,右击数据表“new_phones”,选择“设计”菜单命令,打开数据表设计器,可以查看到已经建立的键。(4)在“表设计器”的快捷菜单中,选择“关系”菜单命令。(5)弹出“外键关系”对话框,单击“添加”按钮,从“选定的关系”列表中选择关系。(6)在网格中,单击“表和列规范”,然后左键单击右侧的省略号()按钮,弹出“表和列”对话框。(7)在“表和列”对话框中,从列表中选择其他表列。外键列必须与主键列的数据类型和大小相匹配,本示例中在主键表中选择“new_employ
15、ees”,数据列选择id_num;在外键表中选择employeeid项,单击“确定”按钮。(8)当关闭表设计器中的网格时,对关系的属性所做的任何更改将立即生效。单击工具栏上的“保存”按钮保存表,将在数据库中更改该约束,单击保存时出现提示,单击“是”按钮完成建立外键。(9)在SQL Server Management Studio工具的“对象资源管理器”中,用户可以查看外键关系,外键显示为一个灰色的钥匙图标。10.4.3 10.4.3 使用使用T-SQLT-SQL定义外键约束定义外键约束l示例:以下示例在ALTER TABLE语句中,使用FOREIGN KEY(employeeid) REFER
16、ENCES dbo.new_employees (id_num)为数据表增加外键约束,具体操作请参考如下步骤(1)单击“开始|所有程序|Microsoft SQL Server 2008|SQL Server Management Studio”命令,启动SQL Server Management Studio工具。(2)在SQL Server Management Studio工具中,单击“新建查询”按钮,打开一个“新建查询”窗口。(3)在查询编辑器中,录入代码,单击“执行”按钮。10.5 UNIQUE10.5 UNIQUE约束约束lUNIQUE约束是指表中的任何两行都不能有相同的列值。主键
17、也强制实施唯一性,但主键不允许 NULL的出现。一般情况下UNIQUE约束用于确保在非主键列中不输入重复的值。l用户可以在创建表时,将UNIQUE约束作为表定义的一部分。也可以在已经存在的数据表中,使用图形工具或者T-SQL脚本添加UNIQUE约束。一个表可含有多个UNIQUE约束。10.5.1 10.5.1 一个一个UNIQUEUNIQUE约束的示例约束的示例l用户可以使用T-SQL在建立数据表时建立UNIQUE约束。l示例:以下示例在CREATE TABLE语句中,使用UNIQUE NONCLUSTERED关键字,为数据表增加UNIQUE约束,具体操作请参考如下步骤l(1)单击“开始|所有
18、程序|Microsoft SQL Server 2008|SQL Server Management Studio”命令,启动SQL Server Management Studio工具。在SQL Server Management Studio工具中,单击“新建查询”按钮,打开一个“新建查询”窗口。l(2)在查询窗口中,输入代码如下,并单击“执行”按钮,如下所示。l(3)使用SQL Server Management Studio工具,在“对象资源管理器”中,展开数据库,“AdventureWorks”数据库节点,在表目录下的dbo.new_phone_with_unique数据表目录下,找
19、到“键”节点,展开该节点,就可以看到“UQ_new_phone_with_u_041093DD”键。注意该节点以“蓝色向上的钥匙”图标表示该键为数据表的UNIQUE约束。l(4)双击该节点,然后鼠标左键单击工具栏上的“管理索引和键”按钮。l(5)打开“索引/键”对话框。l(6)在右侧网格中,左键单击“列”项,再单击属性右侧的省略号()按钮,显示该约束,涉及的数据列,如本示例的employeeid列。10.5.2 10.5.2 使用表设计器定义使用表设计器定义UNIQUEUNIQUE约约束束l示例:用户可以使用表设计器定义UNIQUE约束,具体操作可以参考如下的步骤(1)单击“开始|所有程序|M
20、icrosoft SQL Server 2008|SQL Server Management Studio”命令,启动SQL Server Management Studio工具。(2)在“对象资源管理器”中,连接到SQL Server 2008数据库引擎实例,再展开该实例。(3)在“对象资源管理器”的“数据表”目录,右击数据表,如前例中的“dbo. new_employees”表,选择“设计”菜单命令,打开数据表设计器,可以查看到已经建立主键关系。(4)右击“表设计器”的行选择器,选择“索引与键”菜单命令。(5)打开“索引/键”对话框,单击“添加”按钮,在右侧网格的“类型”选择中选择“唯一键
21、”项。(6)在“列”选择列时,单击属性右侧的省略号()按钮,弹出“索引列”对话框。本示将name作为唯一键的索引列。在下拉列表框中选择“name”字段,单击“确定”按钮。(7)当关闭表设计器中的网格时,对关系的属性所做的任何更改将立即生效。在保存表时,将在数据库中更改该约束,单击工具栏上“保存”按钮时出现提示,在提示对话框中单击“是”按钮完成建立UNIQUE约束。(8)在SQL Server Management Studio工具的“对象资源管理器”中查看UNIQUE约束。10.5.3 10.5.3 使用使用T-SQLT-SQL定义定义UNIQUEUNIQUE约束约束l示例:以下示例在ALTE
22、R TABLE语句中,使用ADD CONSTRAINT U_phone UNIQUE (phone)语句为数据表增加UNIQUE约束,具体操作请参考如下步骤l(1)单击“开始|所有程序|Microsoft SQL Server 2008|SQL Server Management Studio”命令,启动SQL Server Management Studio工具。在SQL Server Management Studio工具中,单击“新建查询”按钮,打开一个“新建查询”窗口。l(2)在查询窗口中,输入代码如下,并单击“执行”按钮。10.6 CHECK10.6 CHECK约束约束lCHECK约
23、束是限制列可接受的值,它可以强制域的完整性。在数据库中,一般会经常使用CHECK约束。用户可以通过代码和SQL Server Management Studio图形工具建立CHECK约束。10.6.1 10.6.1 一个一个CHECKCHECK约束的示例约束的示例l示例:使用SQL Server Management Studio工具的表设计器查看CHECK约束。具体操作请参考如下操作l(1)单击“开始|所有程序|Microsoft SQL Server 2008|SQL Server Management Studio”命令,启动SQL Server Management Studio工具。
24、l(2)使用SQL Server Management Studio工具,在“对象资源管理器”中,展开数据库,“AdventureWorks”数据库节点,在表目录下的Production.Product数据表目录下,找到“约束”节点,展开该节点,就可以看到“CK_Product_ListPrice”约束。l(3)双击“CK_Product_ListPrice”节点,打开CHECK约束对话框。可以看到该约束,网格的表达式为“(ListPrice=(0.00)”,即价格值必须满足大于等于0.00元。10.6.2 10.6.2 使用表设计器定义使用表设计器定义CHECKCHECK约约束束l示例:使用
25、表设计器建立CHECK约束比较简单,具体操作请参考如下步骤(1)单击“开始|所有程序|Microsoft SQL Server 2008|SQL Server Management Studio”命令,启动SQL Server Management Studio工具。在SQL Server Management Studio工具中,单击“新建查询”按钮,打开一个“新建查询”窗口。(2)在查询窗口中,输入代码如下,并单击“执行”按钮。(3)建立一个示例数据表。USE AdventureWorks(4)在SQL Server Management Studio工具“对象资源管理器”中,展开数据库
26、“AdventureWorks”节点,在其表目录下右击“dbo.new_employee_check”表,选择“设计”菜单命令,打开数据表设计器,可以查看到已经建立主键关系。 (5)在“表设计器”的快捷菜单中,选择“CHECK约束”菜单命令。(6)弹出“CHECK约束”对话框,单击“添加”按钮,此时系统在“选定的CHECK约束列表”中自动添加了一个约束,单击右侧网格的“表达式”,单击表达式右侧的省略号()按钮,在弹出的“CHECK约束表达式”对话框中,输入age年龄的最小值表达式,即“age10”。(7)当关闭对话框后,保存数据表时,将在数据库中更改该约束,单击“保存”时出现提示,单击“是”完
27、成建立CHECK约束。(8)在SQL Server Management Studio工具中“对象资源管理器”中查看CHECK约束。10.6.3 10.6.3 使用使用T-SQLT-SQL定义定义CHECKCHECK约束约束l示例:以下示例在ALTER TABLE语句中,使用ADD CONSTRAINTCHECK语句为数据表增加CHECK约束,具体操作请参考如下步骤l(1)单击“开始|所有程序|Microsoft SQL Server 2005|SQL Server Management Studio”命令,启动SQL Server Management Studio工具。在SQL Serve
28、r Management Studio工具中,单击“新建查询”按钮,打开一个“新建查询”窗口。l(2)在查询窗口中,输入代码如下,并单击“执行”按钮。10.7 DEFAULT10.7 DEFAULT约束约束l默认值是一种常用的约束。在数据表中插入行时没有为列指定值,默认值则指定列中使用什么值。默认值可以是计算结果为常量的任何值,如常量、内置函数或数学表达式。10.7.1 10.7.1 使用表设计器定义使用表设计器定义DEFAULTDEFAULT约束约束l示例:用户可以使用SQL Server Management Studio工具的表设计器定义DEFAULT约束,具体操作可以参考如下的步骤(1
29、)单击“开始|所有程序|Microsoft SQL Server 2008|SQL Server Management Studio”命令,启动SQL Server Management Studio工具。(2)在“对象资源管理器”中,连接到SQL Server 2008数据库引擎实例,再展开该实例。(3)在“对象资源管理器”数据表,右击数据表,如前例中的“dbo.new_employee”表,选择“设计”菜单命令,打开数据表设计器,可以查看到已经建立的键。(4)在表设计器的列属性选项页中,可以找到“默认值或绑定”项,在其右侧的网格中输入默认值,本例中在“dbo.new_employee”表的
30、name字段的默认值中输入default。(5)单击工具栏上的“保存”按钮,保存数据表,即完成建立DEFAULT约束。(6)在SQL Server Management Studio工具的“对象资源管理器”中,该表的“约束”目录下,可以看到“DF_new_employees_name”约束。10.7.2 10.7.2 使用使用T-SQLT-SQL定义定义DEFAULTDEFAULT约约束束l示例:以下示例在ALTER TABLE语句中,使用ADD CONSTRAINTDEFAULTFOR语句为数据表增加DEFAULT约束,具体操作请参考如下步骤l(1)单击“开始|所有程序|Microsoft
31、SQL Server 2008|SQL Server Management Studio”命令,启动SQL Server Management Studio工具。在SQL Server Management Studio工具中,单击“新建查询”按钮,打开一个“新建查询”窗口。l(2)在查询窗口中,输入代码,并单击“执行”按钮。10.8 10.8 禁用约束禁用约束l用户有的时候需要禁用约束,例如在大容量的导入导出数据、临时性的数据维护或者其他操作时,SQL Server 2008数据表为用户提供了禁用约束的方法,这将帮助用户更好的维护数据。本节将列举一些禁用约束的示例。10.8.1 10.8.1
32、 对复制禁用外键约束对复制禁用外键约束l示例:对复制用户可以禁用外键约束,这是约束关系的一个属性,具体操作可以参考如下步骤l(1)单击“开始|所有程序|Microsoft SQL Server 2008|SQL Server Management Studio”命令,启动SQL Server Management Studio工具。l(2)在“对象资源管理器”中,展开要修改的外键约束的表,再展开“键”节点。l(3)右击要设置复制禁用的外键约束,选择“修改”菜单命令。l(4)打开“外键关系”对话框,对“强制用于复制”选择“否”值。l(5)单击“关闭”按钮,再单击“保存”按钮完成保存数据表即可。1
33、0.8.2 10.8.2 对复制禁用对复制禁用CHECKCHECK约束约束l示例:对复制用户可以禁用CHECK约束,这也是约束关系的一个属性,具体操作可以参考如下步骤(1)单击“开始|所有程序|Microsoft SQL Server 2008|SQL Server Management Studio”命令,启动SQL Server Management Studio工具。(2)在“对象资源管理器”中,展开具有要修改的约束的表,再展开“约束”节点。(3)右击该约束,选择“修改”菜单命令。(4)打开“CHECK约束”对话框,对“强制用于复制”选择“否”值。(5)单击“关闭”按钮,再单击“保存”按钮完成保存数据表即可。10.8.3 10.8.3 对对INSERTINSERT和和UPDATEUPDATE语句禁语句禁用外键约
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国际商业设计师创意流派考核题及答案
- 快闪项目在广告设计中的应用探讨试题及答案
- 复习一览表的纺织工程师试题及答案
- 检验招聘笔试试题及答案
- 2024年纺织工程师证书考试高效学习试题及答案
- 2024年纺织品检验员证书考试形式试题及答案
- 2024年国际商业美术设计师考试品牌设计思考试题及答案
- 淮北中考英语试题及答案
- 广告设计的市场营销策略 试题及答案
- 洛阳一模语文试题及答案
- 大学生志愿服务西部计划考试复习题库(笔试、面试题)
- 《建筑制图与识图》课程标准
- 客货线铁路隧道锚杆施工作业指导书
- 箱涵工程监理实施细则
- 公路养护的高级工复习题
- 三人合伙经营协议书 doc 三人合伙经营协议书实用版(六篇)
- 葡萄酒品尝学第八章-2013
- JJF 1793-2020海水营养盐测量仪校准规范
- GB/T 20080-2017液压滤芯技术条件
- 超音速流动与燃烧的大涡模拟基础课件
- 归档文件目录
评论
0/150
提交评论