数据完整性控制

上传人:san****019 文档编号:70559970 上传时间:2019-01-17 格式:PPT 页数:87 大小:4.36MB
返回 下载 相关 举报
数据完整性控制_第1页
第1页 / 共87页
数据完整性控制_第2页
第2页 / 共87页
数据完整性控制_第3页
第3页 / 共87页
数据完整性控制_第4页
第4页 / 共87页
数据完整性控制_第5页
第5页 / 共87页
点击查看更多>>
资源描述

《数据完整性控制》由会员分享,可在线阅读,更多相关《数据完整性控制(87页珍藏版)》请在金锄头文库上搜索。

1、第6章 数据完整性控制,本章学习目标,通过本章的学习,达到以下目标: 理解数据完整性的概念、类型及实现方式。 掌握使用约束来实现数据完整性。 掌握使用IDENTITY列实现数据完整性。 掌握使用默认值对象和规则实现数据完整性。,本章目录,6.1 数据完整性概述,6.1.1 数据完整性定义,数据完整性是指数据的精确性和可靠性,主要用于保证数据库中数据的质量。它是为防止数据库中存在不符合语义规定的数据和防止因错误信息的输入/输出造成无效操作或报错而提出的。,6.1.2 数据完整性类型,实体完整性 实体完整性,又称行完整性,用于保证表中的每一行数据在表中是唯一的。保证实体完整性的措施:PRIMARY

2、 KEY约束、UNIQUE约束或IDENTITY列。 域完整性 域完整性,又称列完整性,是指数据表特定列输入的有效性。用来保证列值的有效性与正确性。保证域完整性的措施:限制数据的类型或格式、CHECK约束、DEFAULT约束、NOT NULL约束或规则。 参照完整性 参照完整性,又称引用完整性,是建立在外键与主键或外键与唯一键之间的一种引用规则。保证参照完整性的措施有FOREIGN KEY约束。 用户定义完整性 用户定义的不属于其他任何完整性类别的特定业务规则,称为用户定义完整性。所有完整性类别都支持用户定义完整性。,6.1.3 实现数据完整性的方式,SQL Server 2008中采用两种方

3、式实现数据完整性。 1声明数据完整性 声明数据完整性是通过在数据库中定义一系列的数据约束与验证标准,并由数据库系统自身在插入、修改、删除数据时自动实施这些标准的一种数据完整性实现手段。声明数据完整性主要通过定义与使用约束、默认值与规则来实现。 2过程数据完整性 过程数据完整性是通过在脚本语言中定义一系列的数据约束与验证标准,并在脚本执行过程中强制完成这些标准的检验。过程数据完整性主要通过定义与使用视图、触发器和存储过程来实现。 本章仅介绍声明数据完整性的实现方法与技术。,6.2 使用约束实现数据完整性,6.2.1 约束概述,1约束定义 约束(constraint)是SQL Server 200

4、8提供的自动保持数据库完整性的一种方法。约束就是限制,定义约束就是定义可输入表或表的单个列中的数据的限制条件。 2约束分类 在SQL Server中有6种约束: 主键约束(primary key constraint) 唯一约束(unique constraint) 外键约束(foreign key constraint) 检查约束(check constraint) 默认约束(default constraint) 非空约束(not null constraint),约束与完整性之间的关系,3约束名 在创建约束时,需要创建约束的名称,约束名称必须符合标识符命名规则。建议使用约束类型和其完成任

5、务的从句组合作为约束名。例如,学生信息表的主键使用PK_学生信息表。 4创建约束的语法格式 (1)使用CREATE TABLE语句创建约束 其语法格式如下: CREATE TABLE 表名 (,|) 其中,参数说明如下。 表名:是合法标识符,最多可有128个字符。 : ,(2)使用ALTER TABLE语句创建约束 其语法格式如下: ALTER TABLE 表名 ADD 在SQL Server中对基本表的约束分为: 列约束:是对某一个特定列的约束,包含在列定义中,直接跟在该列的其他定义之后,用空格分隔,不必指定列名。 表约束:与列定义相互独立,不包括在列定义中,通常用于对多个列一起进行约束,与

6、列定义用“,”分隔,定义表约束时必须指出要约束的那些列的名称。,6.2.2 主键约束,主键约束(primary key constraint)用于指定表的一列或几列的组合来唯一标识表,即能在表中唯一地指定一行记录,这样的一列或列的组合称为表的主键(primary key,PK)。 定义主键约束的列其值不可为空、不可重复。 每个表中只能有一个主键。 1使用SSMS创建主键约束 【例6.1】在学生成绩数据库中,创建第1章中设计的系部表,表的结构如表1-10所示。 分析:在例5.2中已经创建系部表,但是没有设置主键约束,且已经在例5.12中删除,在此利用SSMS重新创建具有主键约束的系部表。,具体操

7、作步骤如下: 1)启动SSMS。 2)在【对象资源管理器】窗口中,展开【数据库】|【学生成绩】|【表】节点。右击【表】节点,在弹出的快捷菜单窗口中执行【新建表】命令,打开表设计器。 3)在表设计器中,在【列名】单元格输入字段名“系部编号”,在同一行的【数据类型】单元格设置该字段的数据类型为char(2),并在【允许Null值】列选择不允许该字段为空值。 4)重复步骤(3)设置“系部名称”、“系部主任”列。 5)将光标定位在“系部编号”行。 6)单击SSMS工具栏上的 按钮设置主键,“系部编号”行显示一个钥匙图标,如图6-3所示。 7)执行【文件】|【保存】命令或单击工具栏上的保存按钮,在打开的

8、对话框中输入表名称“系部表”,单击【确定】按钮保存表。,图6-3 系部表结构,2在创建表的同时创建主键约束 1)创建单个列的主键可采用列级约束,它的语法格式如下。 CREATE TABLE表名 (列名CONSTRAINT约束名PRIMARY KEYCLUSTERED |NONCLUSTERED ,n ) 2)多个列组合的主键约束,采用表级约束,它的语法格式如下。 CREATE TABLE 表名 (CONSTRAINT 约束名 PRIMARY KEY CLUSTERED | NONCLUSTERED(列名1 ,列名n ) ,n ) 其中,CLUSTERED为默认值,表示创建聚集索引,NONCLU

9、STERED表示创建非聚集索引。,【例6.2】在学生成绩数据库中,创建如表1-11所示的课程信息表。 在查询编辑器窗口中执行如下Transact-SQL语句: USE 学生成绩 GO CREATE TABLE 课程信息表 (课程编号 char(4) NOT NULL PRIMARY KEY, 课程名称 varchar(30) NOT NULL, 学分 decimal(3,1) NULL, 学时 int NULL, 考核类型 char(4) NULL ) GO,【说明】列约束包含在列定义中,直接跟在该列的其他定义之后,用空格分隔,不必指定约束名,系统自动给定约束名。,【例6.3】在学生成绩数据库

10、中,创建如表1-12所示的成绩表。 分析:由于创建的是组合主键约束,所以只能采用表级约束。 在查询编辑器窗口中执行如下Transact-SQL语句。 USE 学生成绩 GO CREATE TABLE 成绩表 (CONSTRAINT PK_成绩表 PRIMARY KEY(学号,课程编号), 学号 char(8) NOT NULL, 课程编号 char(4) NOT NULL, 成绩 decimal(4,1) NULL) GO,【说明】 创建多个列组合的约束(如组合主键)时,只能将其定义为表级约束。 定义时必须指出要约束的那些列的名称,与列定义用“,”分隔。,3在一张现有表上添加主键约束 (1)使

11、用SSMS添加主键约束 在【对象资源管理器】窗口中,右击要添加主键约束的表,在弹出的快捷菜单中执行【设计】命令,利用表设计器添加主键约束。 (2)利用ALTER TABLE语句 它的语法格式如下: ALTER TABLE表名 ADD CONSTRAIN 约束名 PRIMARY KEY CLUSTERED | NONCLUSTERED (列名1,列名n),【例6.4】为例5.1和例5.2中创建的“学生信息表”和“班级表”添加主键约束。 分析:在例5.1和例5.2中创建的“学生信息表”和“班级表”不带主键约束,在此添加约束,修改表定义,使用ALTER TABLE语句。 在查询编辑器窗口中执行如下T

12、ransact-SQL语句。 USE 学生成绩 GO ALTER TABLE 学生信息表 ADD CONSTRAINT PK_学生信息表 PRIMARY KEY(学号) GO ALTER TABLE 班级表 ADD CONSTRAINT PK_班级表 PRIMARY KEY(班级编号) GO,4删除主键约束 (1)使用SSMS删除 在【对象资源管理器】中,展开【数据库】|【学生成绩】|【表】|【要删除约束的表】|【键】节点,右击【主键约束名】,在弹出的快捷菜单中执行【删除】命令即可。 (2)使用Transact-SQL语句 删除约束的语法格式如下。 ALTER TABLE表名 DROP CON

13、STRAINT 约束名1,约束名n,6.2.3 唯一约束,唯一约束(unique constraint)用于指定非主键的一个列或多个列的组合值具有唯一性,以防止在列中输入重复的值,也就是说如果一个数据表已经设置了主键约束,但该表中还包含其他的非主键列,也必须具有唯一性,为避免该列中的值出现重复输入的情况,必须使用唯一约束(一个数据表不能包含两个或两个以上的主键约束)。 唯一约束与主键约束的区别如下: 唯一约束指定的列可以为NULL,但主键约束所在的列则不允许为NULL。 一个表中可以包含多个唯一约束,而主键约束则只能有一个。,1使用SSMS创建唯一约束 【例6.5】为例6.1中创建的“系部表”

14、的“系部名称”列设置唯一约束。 具体操作步骤如下。 1)在【对象资源管理器】窗口中,展开【数据库】|【学生成绩】|【表】节点。右击【dbo.系部表】节点,在弹出的快捷菜单中执行【设计】命令,打开表设计器。 2)在表设计器中,将光标定位在“系部名称”行,右击,在弹出的快捷菜单中执行【索引/键】命令,打开【索引/键】对话框。 3)单击【索引/键】对话框左下方的【添加】按钮,按钮上方的索引/键列表框中增加一个名为“IX_系部表*”的项,星号表示该名称未确定,用户可对其进行修改。,4)在【索引/键】对话框右侧的属性面板中,修改【标识】的【名称】属性项的值,将“IX_系部表”改为“UQ_系部表”。 5)

15、修改【常规】属性组中的两个属性项:从【类型】属性右侧的下拉列表中选择“唯一键”,如图6-4所示;单击【列】属性项右侧的 按钮,打开如图6-5所示的【索引列】对话框,为唯一约束指定字段名与唯一索引的排序顺序。 6)单击【索引/键】对话框右下方的【关闭】按钮。 7)执行【文件】|【保存】命令或单击工具栏上的 按钮。至此,唯一约束创建完成。,图6-4 【索引/键】对话框,图6-5 【索引列】对话框,2创建表的同时创建唯一约束 定义唯一约束的语法格式如下。 语法格式1: CREATE TABLE 表名 (列名 CONSTRAINT约束名 UNIQUECLUSTERED |NONCLUSTERED ,n

16、) 语法格式2: CREATE TABLE 表名 (CONSTRAINT 约束名 UNIQUE CLUSTERED | NONCLUSTERED (列名1 ,列名n ) ,n ) 其中,NONCLUSTERED为默认值。,【例6.6】删除系部表,重新创建如表1-10所示带有主键约束和唯一约束完整的系部表。 在查询编辑器窗口中执行如下Transact-SQL语句。 USE 学生成绩 GO DROP TABLE 系部表 GO CREATE TABLE 系部表 (系部编号 char(2) NOT NULL PRIMARY KEY, 系部名称 varchar(16) NOT NULL UNIQUE, 系部主任 varchar(8) NULL) GO,3修改表语句创建唯一约束 语法格式如下。 ALTER TABLE表名 ADD CONSTRAINT 约束名UNIQUE CLUSTERED|NON

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号