数据完整性控制.ppt
《数据完整性控制.ppt》由会员分享,可在线阅读,更多相关《数据完整性控制.ppt(87页珍藏版)》请在三一办公上搜索。
1、第6章 数据完整性控制,本章学习目标,通过本章的学习,达到以下目标:理解数据完整性的概念、类型及实现方式。掌握使用约束来实现数据完整性。掌握使用IDENTITY列实现数据完整性。掌握使用默认值对象和规则实现数据完整性。,本章目录,6.1 数据完整性概述,6.1.1 数据完整性定义,数据完整性是指数据的精确性和可靠性,主要用于保证数据库中数据的质量。它是为防止数据库中存在不符合语义规定的数据和防止因错误信息的输入/输出造成无效操作或报错而提出的。,6.1.2 数据完整性类型,实体完整性实体完整性,又称行完整性,用于保证表中的每一行数据在表中是唯一的。保证实体完整性的措施:PRIMARY KEY约
2、束、UNIQUE约束或IDENTITY列。域完整性域完整性,又称列完整性,是指数据表特定列输入的有效性。用来保证列值的有效性与正确性。保证域完整性的措施:限制数据的类型或格式、CHECK约束、DEFAULT约束、NOT NULL约束或规则。参照完整性参照完整性,又称引用完整性,是建立在外键与主键或外键与唯一键之间的一种引用规则。保证参照完整性的措施有FOREIGN KEY约束。用户定义完整性用户定义的不属于其他任何完整性类别的特定业务规则,称为用户定义完整性。所有完整性类别都支持用户定义完整性。,6.1.3 实现数据完整性的方式,SQL Server 2008中采用两种方式实现数据完整性。1声
3、明数据完整性声明数据完整性是通过在数据库中定义一系列的数据约束与验证标准,并由数据库系统自身在插入、修改、删除数据时自动实施这些标准的一种数据完整性实现手段。声明数据完整性主要通过定义与使用约束、默认值与规则来实现。2过程数据完整性过程数据完整性是通过在脚本语言中定义一系列的数据约束与验证标准,并在脚本执行过程中强制完成这些标准的检验。过程数据完整性主要通过定义与使用视图、触发器和存储过程来实现。本章仅介绍声明数据完整性的实现方法与技术。,6.2 使用约束实现数据完整性,6.2.1 约束概述,1约束定义约束(constraint)是SQL Server 2008提供的自动保持数据库完整性的一种
4、方法。约束就是限制,定义约束就是定义可输入表或表的单个列中的数据的限制条件。2约束分类在SQL Server中有6种约束:主键约束(primary key constraint)唯一约束(unique constraint)外键约束(foreign key constraint)检查约束(check constraint)默认约束(default constraint)非空约束(not null constraint),约束与完整性之间的关系,3约束名在创建约束时,需要创建约束的名称,约束名称必须符合标识符命名规则。建议使用约束类型和其完成任务的从句组合作为约束名。例如,学生信息表的主键使用P
5、K_学生信息表。4创建约束的语法格式(1)使用CREATE TABLE语句创建约束其语法格式如下:CREATE TABLE 表名(,|)其中,参数说明如下。表名:是合法标识符,最多可有128个字符。:,(2)使用ALTER TABLE语句创建约束其语法格式如下:ALTER TABLE 表名ADD在SQL Server中对基本表的约束分为:列约束:是对某一个特定列的约束,包含在列定义中,直接跟在该列的其他定义之后,用空格分隔,不必指定列名。表约束:与列定义相互独立,不包括在列定义中,通常用于对多个列一起进行约束,与列定义用“,”分隔,定义表约束时必须指出要约束的那些列的名称。,6.2.2 主键约
6、束,主键约束(primary key constraint)用于指定表的一列或几列的组合来唯一标识表,即能在表中唯一地指定一行记录,这样的一列或列的组合称为表的主键(primary key,PK)。定义主键约束的列其值不可为空、不可重复。每个表中只能有一个主键。1使用SSMS创建主键约束【例6.1】在学生成绩数据库中,创建第1章中设计的系部表,表的结构如表1-10所示。分析:在例5.2中已经创建系部表,但是没有设置主键约束,且已经在例5.12中删除,在此利用SSMS重新创建具有主键约束的系部表。,具体操作步骤如下:1)启动SSMS。2)在【对象资源管理器】窗口中,展开【数据库】|【学生成绩】|
7、【表】节点。右击【表】节点,在弹出的快捷菜单窗口中执行【新建表】命令,打开表设计器。3)在表设计器中,在【列名】单元格输入字段名“系部编号”,在同一行的【数据类型】单元格设置该字段的数据类型为char(2),并在【允许Null值】列选择不允许该字段为空值。4)重复步骤(3)设置“系部名称”、“系部主任”列。5)将光标定位在“系部编号”行。6)单击SSMS工具栏上的 按钮设置主键,“系部编号”行显示一个钥匙图标,如图6-3所示。7)执行【文件】|【保存】命令或单击工具栏上的保存按钮,在打开的对话框中输入表名称“系部表”,单击【确定】按钮保存表。,图6-3 系部表结构,2在创建表的同时创建主键约束
8、1)创建单个列的主键可采用列级约束,它的语法格式如下。CREATE TABLE表名(列名CONSTRAINT约束名PRIMARY KEYCLUSTERED|NONCLUSTERED,n)2)多个列组合的主键约束,采用表级约束,它的语法格式如下。CREATE TABLE 表名(CONSTRAINT 约束名 PRIMARY KEY CLUSTERED|NONCLUSTERED(列名1,列名n),n)其中,CLUSTERED为默认值,表示创建聚集索引,NONCLUSTERED表示创建非聚集索引。,【例6.2】在学生成绩数据库中,创建如表1-11所示的课程信息表。在查询编辑器窗口中执行如下Transa
9、ct-SQL语句:USE 学生成绩GOCREATE TABLE 课程信息表(课程编号 char(4)NOT NULL PRIMARY KEY,课程名称 varchar(30)NOT NULL,学分 decimal(3,1)NULL,学时 int NULL,考核类型 char(4)NULL)GO,【说明】列约束包含在列定义中,直接跟在该列的其他定义之后,用空格分隔,不必指定约束名,系统自动给定约束名。,【例6.3】在学生成绩数据库中,创建如表1-12所示的成绩表。分析:由于创建的是组合主键约束,所以只能采用表级约束。在查询编辑器窗口中执行如下Transact-SQL语句。USE 学生成绩GOCR
10、EATE TABLE 成绩表(CONSTRAINT PK_成绩表 PRIMARY KEY(学号,课程编号),学号 char(8)NOT NULL,课程编号 char(4)NOT NULL,成绩 decimal(4,1)NULL)GO,【说明】创建多个列组合的约束(如组合主键)时,只能将其定义为表级约束。定义时必须指出要约束的那些列的名称,与列定义用“,”分隔。,3在一张现有表上添加主键约束(1)使用SSMS添加主键约束在【对象资源管理器】窗口中,右击要添加主键约束的表,在弹出的快捷菜单中执行【设计】命令,利用表设计器添加主键约束。(2)利用ALTER TABLE语句它的语法格式如下:ALTER
11、 TABLE表名ADD CONSTRAIN 约束名 PRIMARY KEY CLUSTERED|NONCLUSTERED(列名1,列名n),【例6.4】为例5.1和例5.2中创建的“学生信息表”和“班级表”添加主键约束。分析:在例5.1和例5.2中创建的“学生信息表”和“班级表”不带主键约束,在此添加约束,修改表定义,使用ALTER TABLE语句。在查询编辑器窗口中执行如下Transact-SQL语句。USE 学生成绩GOALTER TABLE 学生信息表ADD CONSTRAINT PK_学生信息表 PRIMARY KEY(学号)GOALTER TABLE 班级表ADD CONSTRAIN
12、T PK_班级表 PRIMARY KEY(班级编号)GO,4删除主键约束(1)使用SSMS删除在【对象资源管理器】中,展开【数据库】|【学生成绩】|【表】|【要删除约束的表】|【键】节点,右击【主键约束名】,在弹出的快捷菜单中执行【删除】命令即可。(2)使用Transact-SQL语句删除约束的语法格式如下。ALTER TABLE表名DROP CONSTRAINT 约束名1,约束名n,6.2.3 唯一约束,唯一约束(unique constraint)用于指定非主键的一个列或多个列的组合值具有唯一性,以防止在列中输入重复的值,也就是说如果一个数据表已经设置了主键约束,但该表中还包含其他的非主键
13、列,也必须具有唯一性,为避免该列中的值出现重复输入的情况,必须使用唯一约束(一个数据表不能包含两个或两个以上的主键约束)。唯一约束与主键约束的区别如下:唯一约束指定的列可以为NULL,但主键约束所在的列则不允许为NULL。一个表中可以包含多个唯一约束,而主键约束则只能有一个。,1使用SSMS创建唯一约束【例6.5】为例6.1中创建的“系部表”的“系部名称”列设置唯一约束。具体操作步骤如下。1)在【对象资源管理器】窗口中,展开【数据库】|【学生成绩】|【表】节点。右击【dbo.系部表】节点,在弹出的快捷菜单中执行【设计】命令,打开表设计器。2)在表设计器中,将光标定位在“系部名称”行,右击,在弹
14、出的快捷菜单中执行【索引/键】命令,打开【索引/键】对话框。3)单击【索引/键】对话框左下方的【添加】按钮,按钮上方的索引/键列表框中增加一个名为“IX_系部表*”的项,星号表示该名称未确定,用户可对其进行修改。,4)在【索引/键】对话框右侧的属性面板中,修改【标识】的【名称】属性项的值,将“IX_系部表”改为“UQ_系部表”。5)修改【常规】属性组中的两个属性项:从【类型】属性右侧的下拉列表中选择“唯一键”,如图6-4所示;单击【列】属性项右侧的 按钮,打开如图6-5所示的【索引列】对话框,为唯一约束指定字段名与唯一索引的排序顺序。6)单击【索引/键】对话框右下方的【关闭】按钮。7)执行【文
15、件】|【保存】命令或单击工具栏上的 按钮。至此,唯一约束创建完成。,图6-4【索引/键】对话框,图6-5【索引列】对话框,2创建表的同时创建唯一约束定义唯一约束的语法格式如下。语法格式1:CREATE TABLE 表名(列名 CONSTRAINT约束名 UNIQUECLUSTERED|NONCLUSTERED,n)语法格式2:CREATE TABLE 表名(CONSTRAINT 约束名 UNIQUE CLUSTERED|NONCLUSTERED(列名1,列名n),n)其中,NONCLUSTERED为默认值。,【例6.6】删除系部表,重新创建如表1-10所示带有主键约束和唯一约束完整的系部表。在
16、查询编辑器窗口中执行如下Transact-SQL语句。USE 学生成绩GODROP TABLE 系部表GOCREATE TABLE 系部表(系部编号 char(2)NOT NULL PRIMARY KEY,系部名称 varchar(16)NOT NULL UNIQUE,系部主任 varchar(8)NULL)GO,3修改表语句创建唯一约束语法格式如下。ALTER TABLE表名ADD CONSTRAINT 约束名UNIQUE CLUSTERED|NONCLUSTERED(列名1,列名n)【例6.7】为例5.2中创建的“班级表”的“班级名称”列添加唯一约束。在查询编辑器窗口中执行如下Transa
17、ct-SQL语句。USE 学生成绩GOALTER TABLE 班级表ADD CONSTRAINT UQ_班级表 UNIQUE(班级名称)GO唯一约束的删除同主键约束,这里不再介绍。,6.2.4 外键约束,外键约束(foreign key constraint)强制实现参照完整性,能够在同一个数据库的多个表之间建立关联,并维护表与表之间的依赖关系。外键约束定义一个列或多个列的组合为当前表的外键,该外键值引用其他表中的主键约束所映射列的列值。1使用SSMS创建外键约束【例6.8】在学生成绩数据库中,为班级表添加外键。具体操作步骤如下。1)在【对象资源管理器】窗口中,展开【数据库】|【学生成绩】|【
18、表】|【dbo.班级表】节点。右击【键】节点,在弹出的快捷菜单中执行【新建外键】命令,打开如图6-6所示的【外键关系】对话框。2)单击【表和列规范】属性项右侧的 按钮,打开【表和列】对话框。选择系部表作为主键表,其主键为“系部编号”,系统默认选择班级表作为外键表,并将“系部编号”作为外键,如图6-7所示,单击【确定】按钮。,图6-6【外键关系】对话框,图6-7【表和列】对话框,3)在【外键关系】对话框中单击【关闭】按钮。然后保存对班级表结构所做的修改,班级表的外键创建成功。刷新学生成绩数据库后,在【对象资源管理器】窗口中,展开【数据库】|【学生成绩】|【表】|【dbo.班级表】|【键】节点,可
19、以看到所创建的外键约束,如图6-8所示。【说明】为确保班级表的外键约束创建成功,先把班级表中的记录清除,因为在第5章中在班级表中插入有记录,而系部表为空,这样如不清除班级表中的记录,创建外键约束时会发生冲突。,图6-8 查看班级表外键,2使用ALTER TABLE语句定义外键约束语法格式如下:ALTER TABLE 外键表名ADD CONSTRAINT 外键约束名 FOREIGN KEY(列名1,列名2,列名n)REFERENCES 主键表名(列名1,列名2,列名n)ON DELETE CASCADE|NO ACTION|SET NULL|SET DEFAULT ON UPDATE CASCA
20、DE|NO ACTION|SET NULL|SET DEFAULT,其中,参数说明如下。ON DELETE选项子句用来规定当从主键表中删除记录时,外键表中的记录将执行何种操作。子句各备选项参数意义如下。CASCADE:当从主键表中删除一行记录时,外键表中的相应记录行将被删除。NO ACTION:当从主键表中删除一行记录时,外键表不采取任何操作,仅返回删除失败的错误信息,为默认值。SET NULL:当从主键表中删除一行记录时,外键表中相应记录各列被赋予空值。SET DEFAULT:当从主键表中删除一行记录时,外键表中相应记录各列被赋予默认值。ON UPDATE选项子句用来规定当从主键表中更新记录
21、时,外键表中的记录将执行何种操作。各参数的意义与ON DELETE子句相似。,【例6.9】在学生成绩数据库中,为成绩表创建外键约束。分析:在表1-12成绩表的结构中,有引用来自“学生信息表”的“学号”和“课程信息表”的“课程编号”两个外键列,可以使用ALTER TABLE语句创建外键约束。在查询编辑器窗口中执行如下Transact-SQL语句。USE 学生成绩GOALTER TABLE 成绩表ADD CONSTRAINT FK_成绩表_学生信息表FOREIGN KEY(学号)REFERENCES 学生信息表(学号)GOALTER TABLE 成绩表ADD CONSTRAINT FK_成绩表_课
22、程信息表FOREIGN KEY(课程编号)REFERENCES 课程信息表(课程编号)GO,3使用数据库关系图创建外键约束【例6.10】在学生成绩数据库中,使用数据库关系图为学生信息表创建外键约束。分析:在表1-8学生信息表的结构中,有引用来自“班级表”的“班级编号”外键列,这里使用数据库关系图为其创建外键约束。具体操作步骤如下。1)在【对象资源管理器】窗口中,展开【数据库】|【学生成绩】节点,右击【数据库关系图】节点,在弹出的快捷菜单中执行【新建数据库关系图】命令,打开如图6-9所示的【添加表】对话框。2)在【添加表】对话框中,单击【添加】按钮把学生成绩数据库中的五张表都添加到数据库关系图中
23、,单击【关闭】按钮。产生如图6-10所示的学生成绩数据库关系图。,图6-9【添加表】对话框,图6-10 学生成绩数据库关系图,3)在图6-10中可以看到学生成绩数据库中已经建立的外键约束。在学生信息表中选中“班级编号”列,拖动鼠标指针指向班级表中的“班级编号”列,同时弹出【外键关系】和【表和列】两个对话框,分别单击【确定】和【关闭】按钮即可给学生信息表创建外键约束。4)单击工具栏上的 按钮,保存数据库关系图,刷新数据库即可查看学生信息表的外键约束。外键约束的删除操作与主键约束相同,这里不再介绍。,6.2.5 检查约束,检查约束(check constraint)通过控制列值的范围来实现域完整性
24、。检查约束限制对特定列输入数据的范围或格式,确保该列获得有效值,避免非法数据的产生与扩散。对同一个列可定义多个检查约束。但标识列、ROWGUIDCOL列或数据类型为TIMESTAMP的列不能定义检查约束,因为这几类列的列值由数据库系统自动添加。检查约束的作用类似于外键约束,它们都能限制列的取值范围。但两种约束确定列值是否有效的方法却不相同。检查约束通过指定的逻辑表达式来限制列的取值范围。外键约束则通过其他表来限制列的取值范围。,1使用SSMS创建检查约束【例6.11】在学生成绩数据库中,为学生信息表中的“性别”列添加检查约束,要求其取值为“男”或“女”。分析:由于学生信息表已经建立,这里用SS
25、MS修改学生信息表结构,为“性别”列添加检查约束。具体操作步骤如下。1)在【对象资源管理器】窗口中,展开【数据库】|【学生成绩】|【表】|【dbo.学生信息表】节点。右击【约束】节点,在弹出的快捷菜单中执行【新建约束】命令,打开【CHECK约束】对话框。2)修改【标识】的【名称】属性项的值为“CK_学生信息表_性别”;在【常规】的【表达式】属性项中输入“性别=男 OR 性别=女”,如图6-11所示。3)单击【关闭】按钮。然后保存对学生信息表结构所做的修改,“性别”列上成功创建检查约束。,图6-11【CHECK约束】对话框,2使用CREATE TABLE语句定义检查约束使用CREATE TABL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 完整性 控制
链接地址:https://www.31ppt.com/p-5985440.html