第6章实现数据完整性
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例:创建表时带有默认约束。 create table 专业 (专业代码 char(2) constraint pk_bjdm primary key, 专业名称 varchar(20) not null, 授课语言 char(10) NULL DEFAULT(‘汉语’) ) go
例:在学生表的授课语言列上建立一个默 认约束,内容为汉语。 alter table 学生表 add constraint df_aa default ‘汉语’ for ‘授课语言’
1.PRIMARY KEY(主键)约束
表中经常有一个列或列的组合,其值能唯一地标识表中的 每一行。这样的一列或多列称为表的主键,通过它可强制表的 实体完整性。当创建或更改表时可通过定义 PRIMARY KEY 约 束来创建主键。 一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保 唯一数据,所以经常用来定义标识列。 当为表指定 PRIMARY KEY 约束时,SQL 通过为主键列创 建唯一索引强制数据的唯一性。当在查询中使用主键时,该索 引还可用来对数据进行快速访问。 如果 PRIMARY KEY 约束定义在不止一列上,则一列中的 值可以重复,但 PRIMARY KEY 约束定义中的所有列的组合的 值必须唯一。
(column_name[,…n])
使用sql语句创建主键,有两种方法: (1) 使用 CREATE TABLE; (2) 使用 ALTER TABLE(为已存在的表); 修改表添加约束的语法格式: ALTER TABELE table-name ADD CONSTRAINT constraint-name PRIMARY KEY [CLUSTERED/NONCLUSTERED] 说明: constraint-name 为主键约束名 CLUSTERED表示在该列上建立聚集索引 NONCLUSTERED表示在该列上建立非聚集索引
语法格式:
ALTER TABELE table-name ADD CONSTRAINT constraint-name check (logical_expression) 说明: constraint-name 为唯一约束名; logical_expression是检查约束的条件表达式。 下例显示对输入到 jobs 表中的 min列和 max 列 的值的限制。这两个约束都未命名: CHECK (min>= 10) 与 CHECK (max<= 250)
2.域完整性
域完整性也可称为列完整性,是指给定列 的输入有效性的验证限制。强制域有效性的方 法有:限制类型(通过数据类型)、格式(通 过 CHECK 约束和规则)或有效数据的范围(通 过 FOREIGN KEY(外键)约束、CHECK 约束、 DEFAULT 定义、NOT NULL 定义和规则)。
3.引用(参照)完整性
参照完整性又称为引用完整性。参照完整性是指 作用于有关联的两个或两个以上的表,通过使用主键 和外键或主键和唯一键之间的关系,使表中的键值在 相关表中保持一致。在输入或删除记录时,引用完整 性保持表之间已定义的关系。引用完整性基于外键与 主键之间或外键与唯一键之间的关系(通过 FOREIGN KEY 和 CHECK 约束)。引用完整性确保键值在所有表 中一致。这样的一致性要求不能引用不存在的值,如 果键值更改了,那么在整个数据库中,对该键值的所 有引用要进行一致的更改。
6.3.4
创建DEFAULT默认约束
DEFAULT 定义可用于为表中现有行的新列提供 值。如果列已有默认值,必须除去旧默认值后才能 添加新默认值。除了常量以外,DEFAULT 定义还可 以包含函数。使用下例获取输入项的当前日期: DEFAULT (getdate()) 1.使用企业管理器创建默认约束 2.使用Transact-SQL语句创建默认约束
6.1 完整性的概念
数据完整性就是指存储在数据库中的数据 正确性和相关数据具有一致性。例如在学生表 中学号要具有唯一性,数据库的完整关系到否 能真实反映现实世界,因此十分重要。 数据完整性可分实体完整性、域完整性、 参照完整性和用户定义完整性(ቤተ መጻሕፍቲ ባይዱ种)类型。
1.实体完整性 实体是指表中的纪录,一个实体就是表中 的一条纪录。完整性要求在表中不能存在完全 相同的纪录,而且每条记录都要具有一个非空 且不重复的主键值。这样就能保证事物的唯一 性。 实体完整性将行定义为特定表的唯一实体。 实体完整性强制表的标识符列或主键的完整性 (通过惟一索引、惟一(UNIQUE)约束、主键 (PRIMARY KEY)约束和IDENTITY 属性)。
语法格式:
ALTER TABELE table-name ADD CONSTRAINT constraint-name DEFAULT constant-expression [FOR column-name] 说明: constraint-name 为惟一约束名; constant-expression是默认值。
4.DEFAULT(默认)约束
记录中的每一列均必须有值,即使它是 NULL。 可能会有这种情况,当向表中装载新行时可能不知道 某一列的值,或该值尚不存在。如果该列允许空值, 就可以将该行赋予空值。由于有时不希望有可为空的 列,因此如果合适,更好的解决办法可能是为该列定 义 DEFAULT 定义。例如,通常将数字型列的默认值指 定为零,将字符串列的默认值指定为暂缺。 如果列不允许空值且没有 DEFAULT 定义,就必须 明确地指定列值,否则 SQL Server 会返回错误信息, 指出该列不允许空值。
1.通过企业管理器完成创建和修改唯一性约束的操作 2.使用Transact-SQL语句完成唯一性约束的操作 CONSTRAINT constraint_name UNIQUE [CLUSTERED|NONCLUSTERED] (column_name[,…n])
例:向表中添加具有 UNIQUE 约束的新列。
例如:
在学生表中把学号作为主键。 Use student go alter table 学生表 add constraint jw041 primary key clustered(学号) go
6.3.2
创建惟一约束
UNIQUE 约束可以:
作为表定义的一部分在创建表时创建。如果组 成UNIQUE 约束的列或列组合只包含唯一值或 NULL 值,则可向现有表添加 UNIQUE 约束。一个表可含 有多个 UNIQUE 约束。
4.用户定义完整性
用户定义完整性是应用领域需要遵守的约 束条件,允许用户定义不属于其它任何完整性 分类的特定业务规则。所有的完整性类型都支 持用户定义完整性(CREATE TABLE 中的所有列 级和表级约束、存储过程和触发器)。
6.2
约束的类型
约束是SQL Server提供的自动强制数据完 整性的一种方法,它是通过定义列的取值规则 来维护数据的完整性。约束定义关于列中允许 值的规则,是强制完整性的标准机制。使用约 束优先于使用触发器、规则和默认值。常用的 约束有主键、UNIQUE(惟一)、CHECK(检查)、 FOREIGN KEY(外键)、DEFAULT(默认)约束。
ALTER TABLE 学生 ADD 备注 VARCHAR(20) NULL CONSTRAINT aa UNIQUE
6.3.3
创建检查约束
可以对输入列的值设置检查条件,限制输入值, 维护数据域完整性。表和列可以包含多个 CHECK 约 束。列可以有任意多个 CHECK 约束,并且约束条件 中可以包含用 AND 和 OR 组合起来的多个逻辑表达 式。搜索条件必须取值为布尔表达式。 1.使用企业管理器创建检查约束 2.用Transact-SQL语句创建检查约束。
6.3.1 创建和修改 PRIMARY KEY 约束
一个 PRIMARY KEY 约束可以: 作为表定义的一部分在创建表时创建。添加到尚没有 PRIMARY KEY 约束的表中(一个表只能有一个 PRIMARY KEY 约束)。如果已有 PRIMARY KEY 约束,则可对其进行修改或 删除。定义了 PRIMARY KEY 约束的列的列宽不能更改。当向 表中的现有列添加 PRIMARY KEY 约束时,SQL 检查列中现有 的数据以确保现有数据遵从主键的规则: ☆无空值 ☆无重复值 如果 PRIMARY KEY 约束添加到具有空值或重复值的列上, SQL Server 不执行该操作并返回错误信息。不能添加违背上 述规定的 PRIMARY KEY 约束。
5.FOREIGN KEY(外键)约束
外键 (FK) 是用于建立和加强两个表数据 之间的链接的一列或多列。通过将保存表中主 键值的一列或多列添加到另一个表中,可创建 两个表之间的链接。这个列就成为第二个表的 外键。 当创建或更改表时可通过定义FOREIGN KEY 约束来创建外键。
6.3
约束的创建
2.UNIQUE(惟一)约束
可使用 UNIQUE 约束确保在非主键列中不允许输 入重复值。尽管 UNIQUE 约束和 PRIMARY KEY约束都 强制唯一性,但在强制下面的唯一性时应使用 UNIQUE 约束而不是 PRIMARY KEY 约束: 特点: (1)非主键的一列或多列组合。 一个表可以定义 多个 UNIQUE 约束,而只能定义一个 PRIMARY KEY 约 束。 (2)允许空值的列。 允许空值的列上可以定义 UNIQUE 约束,而不能定义 PRIMARY KEY 约束。 FOREIGN KEY 约束也可引用 UNIQUE 约束。
例:创建表时建立检查约束。内容为系部代码 在0101到1111之间。
use student go create table 专业 (专业代码 char(2) constraint pk_bjdm primary key, 专业名称 varchar(20) not null, 系部代码 char(2) not null constraint chk_aa CHECK (系部代码 BETWEEN 0101 and 1111)) go
3.CHECK(检查)约束
CHECK 约束通过限制输入到列中的值来强制域的 完整性。这与 FOREIGN KEY 约束控制列中数值相似。 区别在于它们如何判断哪些值有效:FOREIGN KEY 约 束从另一个表中获得有效数值列表,CHECK 约束从逻 辑表达式判断而非基于其它列的数据。 例如,通过创建 CHECK 约束可将 salary 列的 取值范围限制在 $15,000 至 $100,000 之间,从而防 止输入的薪金值超出正常的薪金范围。逻辑表达式为: salary >= 15000 AND salary <= 100000
创建、删除和修改约束
约束是SQL Server提供的自动保持数据库 完整性的一种方法 。 列级约束:列级约束是行定义的一部分,只能 够应用在一列上。 表级约束:表级约束的定义独立于列的定义, 可以应用在一个表中的多列上。
主键能够唯一地确定表中的每一条记录,主键不 能取空值。主键约束可以保证实体的完整性。 1.通过企业管理器完成添加、删除和修 改主键的操作 2.使用Transact-SQL语句设置主键约束 CONSTRAINT constraint_name PRIMARY KEY [CLUSTERED|NONCLUSTERED]
第六章 实现SQL server 2000数据完整性
讲解提纲: 6.1 完整性的概念 6.2 约束的类型 6.3 约束的创建 6.4 查看约束的定义 6.5 删除约束 6.6 使用规则 6.7 使用默认
本章要点
数据正确性、数据一致性的概念 创建约束、默认值和规则的企业管理器及
查询分析器的操作方法 教学目的 解决由于数据的添加、删除、修改操作造 成数据的破坏或相关数据不一致的问题, 防止存在不符合规定的数据,防止错误信 息的输入与输出。