第五章-数据完整性

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SQL Server实用教程
2013年8月9日星期五
Page 19
(3)删除检查约束 其语法格式如下。 ALTER TABLE 表名 DROP CONSTRAINT 约束名 【例5.7】删除xs中的电话列的检查约束。 ALTER TABLE xs DROP CONSTRAINT ck_dh GO
SQL Server实用教程
2013年8月9日星期五
Page 13
(2)向已有表中添加唯一约束 其语法格式如下。 ALTER TABLE 表名 ADD [CONSTRAINT 约束名] UNIQUE (列名 1[,…n]) [,…]) (3)删除唯一约束 其语法格式如下。 ALTER TABLE 表名 DROP CONSTRAINT 约束名
SQL Server实用教程
2013年8月9日星期五
Page 7
【例5.1】删除原有kc表,重新创建kc表,字段定义不变, 同时将课程号设置为主键。 USE xsgl DROP TABLE kc GO CREATE TABLE kc ( 课程号 CHAR(4) NOT NULL CONSTRAINT pk_kch PRIMARY KEY, 课程名 CHAR(16) NOT NULL, 学分 SMALLINT, 学时数 SMALLINT )
SQL Server实用教程 2013年8月9日星期五 Page 12
【例5.3】创建和kc表结构相同的kc_new表。 USE xsgl GO CREATE TABLE kc_new (课程号 CHAR(4) NOT NULL CONSTRAINT pk_kch1 PRIMARY KEY, 课程名 CHAR(16) NOT NULL CONSTRAINT ix_kcm1 UNIQUE, 学分 SMALLINT, 学时数 SMALLINT)
SQL Server实用教程
2013年8月9日星期五
Page 15
5.2.3 检查(CHECK)约束
CHECK约束是限制用户输入某一列的数据取值, 即该列只能输入一定范围的数据。 CHECK约束可以作为表定义的一部分在创建表时 创建,也可以添加到现有表中。表和列可以包含 多个CHECK约束。允许修改或删除现有的 CHECK约束。 在现有表中添加CHECK约束时,该约束可以仅作 用于新数据,也可以同时作用于已有的数据。默 认设置为CHECK约束同时作用于已有数据和新数 据。当希望现有数据维持不变,则使用约束仅作 用于新数据选项。
SQL Server实用教程 2013年8月9日星期五 Page 10
5.2.2 唯一键(UNIQUE)约束
可使用UNIQUE约束确保在非主键列中不输入重 复值。在允许空值的列上保证唯一性时,应使用 UNIQUE约束而不是PRIMARY KEY约束,不过 在该列中只允许有一个NULL值。一个表可以定 义 多 个 UNIQUE 约 束 , 但 只 能 定 义 一 个 PRIMARY KEY约束。FOREIGN KEY约束也可 引用UNIQUE约束。
SQL Server实用教程
2013年8月9日星期五
Page 4
4.用户定义的完整性(User-defined Integrity) 这是由用户定义的完整性。用户可以根据自己的 业务规则定义不属于任何完整性分类的完整性。 由于每个用户的数据库都有自己独特的业务规则, 所以系统必须有一种方式来实现定制的业务规则, 即定制的数据完整性约束。 用户定义的完整性可以通过自定义数据类型、规 则、存储过程和触发器来实现。
SQL Server实用教程 2013年8月9日星期五 Page 6
1.利用Management Studio定义(删除)主键 2.利用T-SQL语句定义(删除)主键 (1)在创建表时创建主键约束 其语法格式如下。 语法格式1: CREATE TABLE 数据表名 (列名 数据类型 [CONSTRAINT 约束名] PRIMARY KEY [CLUSTERED︱NONCLUSTERD][,…]) 语法格式2: CREATE TABLE 数据表名 ( [CONSTRAINT 约束名] PRIMARY KEY [CLUSTERED ︱NONCLUSTERD] (列名1[,…n]) [,…])
SQL Server实用教程
2013年8月9日星期五
Page 3
3.参照完整性(Referential Integrity) 参照完整性定义了一个关系数据库中,不同的表中列之间 的关系(父键与外键)。要求一个表中(子表)的一列或 列组合的值必须与另一个表(父表)中的相关一列或列组 合的值相匹配。被引用的列或列组合称为父键,父键必须 是主键或唯一键,通常父键为主键,主键表是主表。 引用父键的一列或列组合称为外键,外键表是子表。如果 父键和外键属于同一个表,则称为自参照完整性。子表的 外键必须与主表的主键相匹配,只要依赖某一主键的外键 存在,主表中包含该主键的行就不能被删除。 当增加、修改或删除数据库表中记录时,可以借助参照完 整性来保证相关联表之间数据的一致性。
SQL Server实用教程
2013年8月9日星期五
Page 11
1.利用Management Studio定义(删除)唯一性约束 2.利用T-SQL语句定义(删除)唯一性约束 (1)在创建表时创建唯一性约束 其语法格式如下。 语法格式1: CREATE TABLE 数据表名 (列名 数据类型 [CONSTRAINT 约束名] UNIQUE [CLUSTERED︱NONCLUSTERD][,…]) 语法格式2: CREATE TABLE 数据表名 ( [CONSTRAINT 约束名] UNIQUE [CLUSTERED︱ NONCLUSTERD] (列名1[,…n]) [,…]) 说明:语法格式1定义单列唯一约束,语法格式2定义多列组 合唯一约束。
第5章 数据完整性
5.1 5.2 5.3 5.4 5.5 5.6
数据完整性的基本概念 约束 默认值 规则 标识列IDENTITY 自定义数据类型
SQL Server实用教程
2013年8月9日星期五
Page 1
教学要求:通过本章学习,读者应掌握以下内容:
使用各种约束保证数据库的完整性 使用规则、默认值来保证数据完整性 对实现数据完整性的各种方法进行分析
SQL Server实用教程
2013年8月9日星期五
Page 2
5.1 数据完整性的基本概念
数据完整性包括实体完整性、域完整性、参照完整性和用 户定义的完整性。 1.实体完整性(Entity Integrity) 实体完整性用于保证数据库中数据表的每一个特定实体都 是唯一的。它可以通过主键约束(PRIMARY KEY)、 唯一键约束(UNIQUE)、索引或标识属性 (IDENTITY)来实现。 2.域完整性(Domain Integrity) 域完整性就是保证数据库中的数据取值的合理性,即保证 指定列的数据具有正确的数据类型、格式和有效的数据范 围。通过为表的列定义数据类型以及检查约束 (CHECK)、默认定义(DEFAULT)、非空(NOT NULL)和规则实现限制数据范围,保证只有在有效范围 内的值才能存储到列中。
SQL Server实用教程
2013年8月9日星期五
Page 8
(2)向已有表中添加主键约束 其语法格式如下。 ALTER TABLE 表名 ADD [CONSTRAINT 约束名] PRIMARY KEY(列 名1[,…n]) [,…]) --添加主键 ALTER TABLE cj ADD CONSTRAINT pk_xhkch PRIMARY KEY(学号,课程号) GO
SQL Server实用教程
2013年8月9日星期五
Page 14
【例5.4】给kc表中课程名字段添加唯一约束。 USE xsgl GO ALTER TABLE kc ADD CONSTRAINT ix_kcm UNIQUE(课程名) GO 【例5.5】删除kc_new中的唯一约束。 USE xsgl GO ALTER TABLE kc_new DROP CONSTRAINT ix_kcm1 GO
SQL Server实用教程
2013年8月9日星期五
Page 20
注意:在默认情况下,检查约束同时作用于新数 据和表中已有的数据,可以通过关键字WITH NOCHECK禁止CHECKຫໍສະໝຸດ Baidu束检查表中已有的数据。 与其他约束不同的是,CHECK约束可以通过 NOCHECK和CHECK关键字设置为无效或重新有 效。 其语法格式如下。 ALTER TABLE 表名 NOCHECK CONSTRAINT 约束名︱CHECK CONSTRAINT 约束名
SQL Server实用教程
2013年8月9日星期五
Page 5
5.2 约束
约束是通过限制列中数据、行中数据以及表之间数据取值 从而保证数据完整性的非常有效和简便的方法。 5.2.1 主键(PRIMARY KEY)约束 PRIMARY KEY约束在表中定义一个主键,唯一的标识 表中的行。一个表只能有一个PRIMARY KEY约束。 当 向 表 中 的 现 有 列 添 加 PRIMARY KEY 约 束 时 , SQL Server将检查列中现有的数据以确保现有数据遵从主键 的规则,即无空值、无重复值。 当PRIMARY KEY约束由另一表的FOREIGN KEY约束引 用时,不能删除被引用的PRIMARY KEY约束,要删除 它,必须先删除引用的FOREIGN KEY约束。 每个表都应有一个主键。主键可以是一列或列组合。
SQL Server实用教程 2013年8月9日星期五 Page 17
【例5.6】 在xs表中增加一个字段“电话(CHAR(8)”,为电话列添加检 查约束,要求每个新加入或修改的电话号码为8位数字,但对表中现有的 记录不进行检查。 USE xsgl GO ALTER TABLE xs ADD 电话 char(8) null --向学生表中插入一条电话号码为7位数字的记录 INSERT xs(学号,姓名,性别,出生时间,专业,总学分,电话) VALUES(2009030108,'耿娇','女','91/6/6','电子商务',19, '4501310') GO --创建不检查现有数据的检查约束 ALTER TABLE xs WITH NOCHECK ADD CONSTRAINT ck_dh CHECK ([电话] LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]') GO
SQL Server实用教程
2013年8月9日星期五
Page 9
(3)删除主键约束 其语法格式如下。 ALTER TABLE 表名 DROP CONSTRAINT 约束名 例如要删除cj表中的主键约束,可以利用如下语句: ALTER TABLE cj DROP CONSTRAINT pk_xhkch 注意:向表中添加主键约束时,SQL Server 将检 查现有记录的列值,以确保现有数据符合主键的规 则,所以在添加主键之前要保证主键列没有空值和 重复值。
SQL Server实用教程 2013年8月9日星期五 Page 18
--创建不检查现有数据的检查约束 ALTER TABLE XS WITH NOCHECK ADD CONSTRAINT ck_dh CHECK ([电话] LIKE '[0-9][0-9][0-9][0-9][09][0-9][0-9][0-9]') GO
SQL Server实用教程
2013年8月9日星期五
Page 16
1.利用Management Studio定义(删除)检查约束 2.利用T-SQL语句定义(删除)检查约束 (1)在创建表时创建检查约束 其语法格式如下。 CREATE TABLE 数据表名 (列名 数据类型 [CONSTRAINT 约束名] CHECK (逻辑表达 式) [,…]) (2)向已有表中添加检查约束 其语法格式如下。 ALTER TABLE 表名 WITH NOCHECK ADD [CONSTRAINT 约束名] CHECK (逻辑表达式) [,…])
相关文档
最新文档