第4章 数据库完整性

更新时间:2023-09-29 10:35:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第4章 数据库完整性

4.1 数据完整性概念 4.1.1 什么是数据完整性?

数据完整性是指存储在数据库中的所有数据值都正确的状态。如果数据库中存储了不正确的数据值,则称该数据库已丢失数据完整性。 4.1.2 什么样的数据具有数据完整性? 满足完整性要求的数据具有以下三个特点: ? 数据的值正确无误

? 数据的存在必须确保同一表格数据之间不存在完全相同的两条或多条数据 ? 数据的存在必须能维护不同表格数据之间的关联情况 4.1.3 数据库完整性分类

实体完整性、域完整性、引用完整性、用户自定义完整性。前面讲过 4.1.4 实施完整性的途径 表-实施完整性的途径 数据完整性类型 实体完整性 实施途径 Primary Key(主键)约束 Unique Key(唯一)约束 Unique Index(唯一索引) Identity Column(标识列) Default(默认值) Check(检查)约束 Foreign Key(外键)约束 Data type(数据类型) Rule (规则) Foreign Key(外键)约束 Check (检查)约束 Trigger (触发器) Stored procedure(存储过程) Rule (规则) Trigger (触发器) Stored procedure(存储过程)

下面我们来了解什么是约束、断言、规则。它们都是保证数据完整性的方法。触发器、存储过程以后讲。

域完整性 引用完整性 用户自定义完整性 4.2 约束

4.2.1 什么是约束?

约束是通过限制列、行中的数据和表之间的数据来保证数据完整性的方法。约束可以确保把有效的数据输入到列中和维护表和表之间的特定关系。 4.2.2 约束分类 SQL中约束分3种类型:

? 与表相关的约束:表定义中的一种约束。最常用的约束,又分为字段级约束、表级约束。

字段级约束就是为某一个字段值设置约束。表约束是将包含多个字段的字段组合设置为约束。如,Student表中,主键约束是字段级约束,主键是SID。SC表中主键约束是表约束,主键是(SID,CID)。

? 断言:在断言定义中的一种约束。不讲 ? 域约束:在域定义中的一种约束。不讲

图 SQL完整性约束类型

从上图可以看出:Microsoft SQL Server 2005系统提供了5种约束类型,即PRIMARY KEY(主键)、FOREIGN KEY(外键)、UNIQUE、CHECK、NOT NULL约束 4.2.3 SQL Server 2005的5种约束类型 1 NOT NULL约束

概念:NULL表示未定义或未知的值;NOT NULL约束只能作为列约束。

设置:在用SQL语句创建列定义时,设置该列具有NOT NULL属性;或者在SQL Sever Management Studio图形界面建表时,禁用”允许空”选项即可。 例如:图形界面建表时,

T-SQL创建表时设置:

CREATE TABLE 职工基本信息表( 编号 int NOT NULL,

姓名 nvarchar(10) NOT NULL, 电话 nvarchar(20) NULL) 2 UNIQUE约束

? 概念:UNIQUE约束的作用是保证在非主键指定的唯一性的列上不会出现重复的数据。 和PRIMARY KEY区别:UNIQUE和PRIMARY KEY约束都能保证数据的唯一性,它们之间的不同是:

? 一个表上只能定义一个主键约束,但可以定义多个唯一性约束。

? 定义了唯一性约束的列上的数据可以是空值,定义了主键约束的列上数据不能是空值。 ? 唯一性约束的操作方式: (1) 在创建表格时,定义UNIQUE约束

语法:[CONTRAINT 约束名] UNIQUE [CLUSTERED|NONCLUSTERED][(字段名[,?n])] 说明:CLUSTERED 表示在该列上建立聚集索引。 NONCLUSTERED 表示在该列上建立非聚集索引。

聚集索引确定表中数据的物理存储顺序。因此一个表只包含一个聚集索引。 例如:CREATE TABLE 员工信息(

编号int NOT NULL,

姓名nvarchar(10) NOT NULL, 联系电话nvarchar(10) NOT NULL,

CONSTRAINT UNI_姓名_编号UNIQUE(姓名,编号))

说明:这是把姓名和编号合并到一个组,并对该组进行约束。 CREATE TABLE 员工信息(

编号 int NOT NULL,

姓名 nvarchar(10) NOT NULL UNIQUE, 联系电话 nvarchar(10) NOT NULL) 说明:只对一列指定唯一性约束。 (2) 添加UNIQUE约束

若要在表中添加唯一性约束,则欲约束的列或列的集合没有重复值。 语法:ALTER TABLE 表名 ADD

[CONSTRAINT 约束名]

UNIQUE[CLUSTERED|NONCLUSTERED] (字段名[,?n]) 例如:ALTER TABLE 员工信息 ADD

CONSTRAINT UNI_电话 UNIQUE NONCLUSTERED(电话) (3) 删除UNIQUE约束 语法:ALTER TABLE 表名 DROP

{[CONSTRAINT] 约束名}[,?n] 例: ALTER TABLE 员工信息 DROP

CONSTRAINT UNI_电话 ? 用SSMS操作UNIQUE约束 例如:Student表中的Sname

在欲设置唯一键的字段上,右键快捷菜单或工具栏按钮“索引/键”,—>弹出的【索引/键】对话框->单击“添加”按钮添加新的主/惟一键或索引->在常规的“类型”右边选择“惟一键”,->在“列”的右边单击省略号按钮,选择列名Sname和排序规律;

若要删除UNIQUE约束,则重新打开“索引/键”窗口,单击“删除”按钮即可。 3 PRIMARY KEY约束

一个表只能有一个主键约束。主键字段不能有重复值,不能有空值。 SQL创建主键约束

语法:[CONTRAINT 约束名] PRIMARY KEY [CLUSTERED|NONCLUSTERED][(字段名[,?n])] 例1:CREATE TABLE 员工信息( 编号 int NOT NULL,

姓名 nvarchar(10) NOT NULL, 联系电话 nvarchar(10) NOT NULL, CONSTRAINT PK_编号 PRIMARY KEY(编号)) 此例给约束起了一个名字,即约束名。 例2:CREATE TABLE 员工信息(

编号int PRIMARY KEY, 姓名nvarchar(10) NOT NULL, 联系电话nvarchar(10) NOT NULL, )

例3:CREATE TABLE 员工信息(

编号int NOT NULL,

本文来源:https://www.bwwdw.com/article/lyhd.html

Top