




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 12021-5-20 q51 数据完整性的基本概念数据完整性的基本概念 q52 约束约束 q53 默认值默认值 q54 规则规则 q55 标识列标识列IDENTITY q56 自定义数据类型自定义数据类型 SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 22021-5-20 1. 数据完整性的含义及分类数据完整性的含义及分类 2. 域完整性的实现域完整性的实现 3. 实体完整必的实现实体完整必的实现 4. 参照完整性的实现参照完整性的实现 SQL ServerSQL Server
2、实用教程实用教程第5章数据完整性Page 32021-5-20 1. 数据完整性的含义及分类数据完整性的含义及分类 2. 每类完整性的实现语法每类完整性的实现语法 SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 42021-5-20 q 数据完整性包括实体完整性、域完整性、参照完整性和用数据完整性包括实体完整性、域完整性、参照完整性和用 户定义的完整性。户定义的完整性。 q 1实体完整性(实体完整性(Entity Integrity) q 实体完整性用于保证数据库中数据表的每一个特定实体都实体完整性用于保证数据库中数据表的每一个特定实体都 是唯一的。它可以通过
3、主键约束(是唯一的。它可以通过主键约束(PRIMARY KEY)、)、 唯一键约束(唯一键约束(UNIQUE)、索引或标识属性)、索引或标识属性 (IDENTITY)来实现。)来实现。 q 2域完整性域完整性(Domain Integrity) q 域完整性就是保证数据库中的数据取值的合理性,即保证域完整性就是保证数据库中的数据取值的合理性,即保证 指定列的数据具有正确的数据类型、格式和有效的数据范指定列的数据具有正确的数据类型、格式和有效的数据范 围。通过为表的列定义数据类型以及检查约束围。通过为表的列定义数据类型以及检查约束 (CHECK)、默认定义()、默认定义(DEFAULT)、非空(
4、)、非空(NOT NULL)和规则实现限制数据范围,保证只有在有效范围)和规则实现限制数据范围,保证只有在有效范围 内的值才能存储到列中。内的值才能存储到列中。 SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 52021-5-20 q 3参照完整性参照完整性(Referential Integrity) q 参照完整性定义了一个关系数据库中,不同的表中列之间参照完整性定义了一个关系数据库中,不同的表中列之间 的关系(父键与外键)。要求一个表中(子表)的一列或的关系(父键与外键)。要求一个表中(子表)的一列或 列组合的值必须与另一个表(父表)中的相关一列或列组列
5、组合的值必须与另一个表(父表)中的相关一列或列组 合的值相匹配。被引用的列或列组合称为父键,父键必须合的值相匹配。被引用的列或列组合称为父键,父键必须 是主键或唯一键,通常父键为主键,主键表是主表。是主键或唯一键,通常父键为主键,主键表是主表。 q 引用父键的一列或列组合称为外键,外键表是子表。如果引用父键的一列或列组合称为外键,外键表是子表。如果 父键和外键属于同一个表,则称为自参照完整性。子表的父键和外键属于同一个表,则称为自参照完整性。子表的 外键必须与主表的主键相匹配,只要依赖某一主键的外键外键必须与主表的主键相匹配,只要依赖某一主键的外键 存在,主表中包含该主键的行就不能被删除。存在
6、,主表中包含该主键的行就不能被删除。 q 当增加、修改或删除数据库表中记录时,可以借助参照完当增加、修改或删除数据库表中记录时,可以借助参照完 整性来保证相关联表之间数据的一致性。整性来保证相关联表之间数据的一致性。 SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 62021-5-20 q4用户定义的完整性用户定义的完整性(User-defined Integrity) q这是由用户定义的完整性。用户可以根据自己的这是由用户定义的完整性。用户可以根据自己的 业务规则定义不属于任何完整性分类的完整性。业务规则定义不属于任何完整性分类的完整性。 由于每个用户的数据
7、库都有自己独特的业务规则,由于每个用户的数据库都有自己独特的业务规则, 所以系统必须有一种方式来实现定制的业务规则,所以系统必须有一种方式来实现定制的业务规则, 即定制的数据完整性约束。即定制的数据完整性约束。 q用户定义的完整性可以通过自定义数据类型、规用户定义的完整性可以通过自定义数据类型、规 则、存储过程和触发器来实现。则、存储过程和触发器来实现。 SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 72021-5-20 q 约束是通过限制列中数据、行中数据以及表之间数据取值约束是通过限制列中数据、行中数据以及表之间数据取值 从而保证数据完整性的非常有效和简
8、便的方法。从而保证数据完整性的非常有效和简便的方法。 q 521 主键(主键(PRIMARY KEY)约束)约束 q PRIMARY KEY约束在表中定义一个主键,唯一的标识约束在表中定义一个主键,唯一的标识 表中的行。一个表只能有一个表中的行。一个表只能有一个PRIMARY KEY约束。约束。 q 当向表中的现有列添加当向表中的现有列添加PRIMARY KEY约束时,约束时,SQL Server将检查列中现有的数据以确保现有数据遵从主键将检查列中现有的数据以确保现有数据遵从主键 的规则,即无空值、无重复值。的规则,即无空值、无重复值。 q 当当PRIMARY KEY约束由另一表的约束由另一表
9、的FOREIGN KEY约束引约束引 用时,不能删除被引用的用时,不能删除被引用的PRIMARY KEY约束,要删除约束,要删除 它,必须先删除引用的它,必须先删除引用的FOREIGN KEY约束。约束。 q 每个表都应有一个主键。主键可以是一列或列组合。每个表都应有一个主键。主键可以是一列或列组合。 SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 82021-5-20 q 1利用利用Management Studio定义(删除)主键定义(删除)主键 q 2利用利用T-SQL语句定义(删除)主键语句定义(删除)主键 q (1)在创建表时创建主键约束)在创建表时
10、创建主键约束 q 其语法格式如下。其语法格式如下。 q 语法格式语法格式1: CREATE TABLE 数据表名数据表名 (列名列名 数据类型数据类型 CONSTRAINT 约束名约束名 PRIMARY KEY CLUSTEREDNONCLUSTERD,) q 语法格式语法格式2: CREATE TABLE 数据表名数据表名 ( CONSTRAINT 约束名约束名 PRIMARY KEY CLUSTERED NONCLUSTERD (列名列名1,n) ,) SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 92021-5-20 q 【例例5.1】删除原有删除原有
11、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 ServerSQL Server实用教程实用教程第5章数据完整性Page 102021-5-20 q(2)向已有表中添加主键约束)向已有表中添加主键约束 q
12、其语法格式如下。其语法格式如下。 ALTER TABLE 表名表名 ADD CONSTRAINT 约束名约束名 PRIMARY KEY(列列 名名1,n) ,) q-添加主键添加主键 ALTER TABLE cj ADD CONSTRAINT pk_xhkch PRIMARY KEY(学号学号,课程号课程号) GO SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 112021-5-20 q(3)删除主键约束)删除主键约束 q其语法格式如下。其语法格式如下。 ALTER TABLE 表名表名 DROP CONSTRAINT 约束名约束名 q例如要删除例如要删除c
13、j表中的主键约束,可以利用如下语句:表中的主键约束,可以利用如下语句: qALTER TABLE cj qDROP CONSTRAINT pk_xhkch q注意:向表中添加主键约束时,注意:向表中添加主键约束时,SQL Server 将检将检 查现有记录的列值,以确保现有数据符合主键的规查现有记录的列值,以确保现有数据符合主键的规 则,所以在添加主键之前要保证主键列没有空值和则,所以在添加主键之前要保证主键列没有空值和 重复值。重复值。 SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 122021-5-20 q可使用可使用UNIQUE约束确保在非主键列中不输
14、入重约束确保在非主键列中不输入重 复值。在允许空值的列上保证唯一性时,应使用复值。在允许空值的列上保证唯一性时,应使用 UNIQUE约束而不是约束而不是PRIMARY KEY约束,不过约束,不过 在该列中只允许有一个在该列中只允许有一个NULL值。一个表可以定值。一个表可以定 义 多 个义 多 个 U N I Q U E 约 束 , 但 只 能 定 义 一 个约 束 , 但 只 能 定 义 一 个 PRIMARY KEY约束。约束。FOREIGN KEY约束也可约束也可 引用引用UNIQUE约束。约束。 SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 1320
15、21-5-20 q 1利用利用Management Studio定义(删除)唯一性约束定义(删除)唯一性约束 q 2利用利用T-SQL语句定义(删除)唯一性约束语句定义(删除)唯一性约束 q (1)在创建表时创建唯一性约束)在创建表时创建唯一性约束 q 其语法格式如下。其语法格式如下。 q 语法格式语法格式1: CREATE TABLE 数据表名数据表名 (列名列名 数据类型数据类型 CONSTRAINT 约束名约束名 UNIQUE CLUSTEREDNONCLUSTERD,) q 语法格式语法格式2: CREATE TABLE 数据表名数据表名 ( CONSTRAINT 约束名约束名 UNI
16、QUE CLUSTERED NONCLUSTERD (列名列名1,n) ,) q 说明:语法格式说明:语法格式1定义单列唯一约束,语法格式定义单列唯一约束,语法格式2定义多列组定义多列组 合唯一约束。合唯一约束。 SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 142021-5-20 q【例例5.3】创建和创建和kc表结构相同的表结构相同的kc_new表。表。 USE xsgl GO CREATE TABLE kc_new (课程号课程号 CHAR(4) NOT NULL CONSTRAINT pk_kch1 PRIMARY KEY, 课程名课程名 CHAR(
17、16) NOT NULL CONSTRAINT ix_kcm1 UNIQUE, 学分学分 SMALLINT, 学时数学时数 SMALLINT) SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 152021-5-20 q(2)向已有表中添加唯一约束)向已有表中添加唯一约束 q其语法格式如下。其语法格式如下。 ALTER TABLE 表名表名 ADD CONSTRAINT 约束名约束名 UNIQUE (列名列名 1,n) ,) q(3)删除唯一约束)删除唯一约束 q其语法格式如下。其语法格式如下。 ALTER TABLE 表名表名 DROP CONSTRAINT
18、约束名约束名 SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 162021-5-20 q 【例例5.4】给给kc表中课程名字段添加唯一约束。表中课程名字段添加唯一约束。 USE xsgl GO ALTER TABLE kc ADD CONSTRAINT ix_kcm UNIQUE(课程名课程名) GO q 【例例5.5】删除删除kc_new中的唯一约束。中的唯一约束。 USE xsgl GO ALTER TABLE kc_new DROP CONSTRAINT ix_kcm1 GO SQL ServerSQL Server实用教程实用教程第5章数据完整性Pag
19、e 172021-5-20 qCHECK约束是限制用户输入某一列的数据取值,约束是限制用户输入某一列的数据取值, 即该列只能输入一定范围的数据。即该列只能输入一定范围的数据。 qCHECK约束可以作为表定义的一部分在创建表时约束可以作为表定义的一部分在创建表时 创建,也可以添加到现有表中。表和列可以包含创建,也可以添加到现有表中。表和列可以包含 多个多个CHECK约束。允许修改或删除现有的约束。允许修改或删除现有的 CHECK约束。约束。 q在现有表中添加在现有表中添加CHECK约束时,该约束可以仅作约束时,该约束可以仅作 用于新数据,也可以同时作用于已有的数据。默用于新数据,也可以同时作用于
20、已有的数据。默 认设置为认设置为CHECK约束同时作用于已有数据和新数约束同时作用于已有数据和新数 据。当希望现有数据维持不变,则使用约束仅作据。当希望现有数据维持不变,则使用约束仅作 用于新数据选项。用于新数据选项。 SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 182021-5-20 q 1利用利用Management Studio定义(删除)检查约束定义(删除)检查约束 q 2利用利用T-SQL语句定义(删除)检查约束语句定义(删除)检查约束 q (1)在创建表时创建检查约束)在创建表时创建检查约束 q 其语法格式如下。其语法格式如下。 CREATE
21、TABLE 数据表名数据表名 (列名列名 数据类型数据类型 CONSTRAINT 约束名约束名 CHECK (逻辑表达式逻辑表达式) ,) q (2)向已有表中添加检查约束)向已有表中添加检查约束 q 其语法格式如下。其语法格式如下。 ALTER TABLE 表名表名 WITH NOCHECK ADD CONSTRAINT 约束名约束名 CHECK (逻辑表达式逻辑表达式) ,) SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 192021-5-20 q 【例例5.6】在在xs表中增加一个字段表中增加一个字段“电话(电话(CHAR(8)”, 为电话列添加检查约
22、束,要求每个新加入或修改的电话号码为电话列添加检查约束,要求每个新加入或修改的电话号码 为为8位数字,但对表中现有的记录不进行检查。位数字,但对表中现有的记录不进行检查。 USE xsgl GO ALTER TABLE xs ADD 电话电话 CHAR(8) NULL q -向学生表中插入一条电话号码为向学生表中插入一条电话号码为7位数字的记录位数字的记录 INSERT xs(学号学号,姓名姓名,性别性别,出生时间出生时间,专业专业,总学分总学分,电话电话) VALUES(2006030104,李雨李雨,女女,88/04/30,信息管理信息管理 ,22, 4501310) GO SQL Ser
23、verSQL Server实用教程实用教程第5章数据完整性Page 202021-5-20 q-创建不检查现有数据的检查约束创建不检查现有数据的检查约束 ALTER TABLE XS WITH NOCHECK ADD CONSTRAINT ck_dh CHECK (电话电话 LIKE 0-90-90-90-90- 90-90-90-9) GO SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 212021-5-20 q(3)删除检查约束)删除检查约束 q其语法格式如下。其语法格式如下。 ALTER TABLE 表名表名 DROP CONSTRAINT 约束名约束
24、名 q【例例5.7】删除删除xs中的电话列的检查约束。中的电话列的检查约束。 ALTER TABLE xs DROP CONSTRAINT ck_dh GO SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 222021-5-20 q注意:在默认情况下,检查约束同时作用于新数注意:在默认情况下,检查约束同时作用于新数 据和表中已有的数据,可以通过关键字据和表中已有的数据,可以通过关键字WITH NOCHECK禁止禁止CHECK约束检查表中已有的数据。约束检查表中已有的数据。 q与其他约束不同的是,与其他约束不同的是,CHECK约束可以通过约束可以通过 NOCHE
25、CK和和CHECK关键字设置为无效或重新有关键字设置为无效或重新有 效。效。 q其语法格式如下。其语法格式如下。 ALTER TABLE 表名表名 NOCHECK CONSTRAINT 约束名约束名CHECK CONSTRAINT 约束名约束名 SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 232021-5-20 q 【例例5.9】将将xs表中电话列的检查约束失效,然后插入一条具表中电话列的检查约束失效,然后插入一条具 有有6位数字的电话号码字段,之后再重新使其生效。位数字的电话号码字段,之后再重新使其生效。 q -使使CHECK检查失效检查失效 ALTER
26、 TABLE xs NOCHECK CONSTRAINT ck_dh q -插入测试数据插入测试数据 INSERT xs(学号学号,姓名姓名,性别性别,出生时间出生时间,专业专业,总学分总学分,电话电话) VALUES(2006030105,林一凡林一凡,男男,88/12/22,信息管理信息管理 ,20, 123456) q -使使CHECK检查生效检查生效 ALTER TABLE xs CHECK CONSTRAINT ck_dh SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 242021-5-20 q默认约束是指在用户未提供某些列的数据时,数默认约束是指
27、在用户未提供某些列的数据时,数 据库系统为用户提供的默认值。从而简化应用程据库系统为用户提供的默认值。从而简化应用程 序代码和提高系统性能。序代码和提高系统性能。 q表的每一列都可包含一个表的每一列都可包含一个DEFAULT定义。可以定义。可以 修改或删除现有的修改或删除现有的DEFAULT定义,但必须首先定义,但必须首先 删除已有的删除已有的DEFAULT定义,然后通过新定义重定义,然后通过新定义重 新创建。新创建。 SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 252021-5-20 q(1)在创建表时创建默认值约束)在创建表时创建默认值约束 q语法格式
28、语法格式1: CREATE TABLE 数据表名数据表名 (列名列名 数据类型数据类型 CONSTRAINT 约束名约束名 DEFAULT 默认值默认值 ,) q语法格式语法格式2: CREATE TABLE 数据表名数据表名 ( CONSTRAINT 约束名约束名 DEFAULT默认值默认值 FOR 列列 ,) SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 262021-5-20 q (2)向已有表中添加默认值约束)向已有表中添加默认值约束 q 其语法格式如下。其语法格式如下。 ALTER TABLE 表名表名 ADD CONSTRAINT 约束名约束名
29、默认值默认值 FOR 列列 ,) q 【例例5.10】在在xs表的专业列添加一个默认约束,默认值为表的专业列添加一个默认约束,默认值为 “信息管理信息管理”,然后添加一条新记录。,然后添加一条新记录。 q -添加默认值约束添加默认值约束 ALTER TABLE xs ADD CONSTRAINT df_zy DEFAULT 信息管理信息管理 FOR 专业专业 q -插入测试记录插入测试记录 INSERT xs(学号学号,姓名姓名,出生时间出生时间,总学分总学分) VALUES(2006030106,张永强张永强,87/06/23,20) SQL ServerSQL Server实用教程实用教程
30、第5章数据完整性Page 272021-5-20 q(3)删除默认值约束)删除默认值约束 q其语法格式如下。其语法格式如下。 ALTER TABLE 表名表名 DROP CONSTRAINT 约束名约束名 q【例例5.11】删除删除xs表性别列的默认约束。表性别列的默认约束。 q-查看查看xs表性别列的默认约束名,如图表性别列的默认约束名,如图5.7所示。所示。 Sp_help xs GO q-删除删除xs表性别列的默认约束表性别列的默认约束 ALTER TABLE xs DROP CONSTRAINT df_zy GO SQL ServerSQL Server实用教程实用教程第5章数据完整性
31、Page 282021-5-20 q外键约束是为了强制实现表之间的参照完整性,外键约束是为了强制实现表之间的参照完整性, 外键外键FOREIGN KEY可以和主表的主键或唯一键可以和主表的主键或唯一键 对应,外键约束不允许为空值,但是,如果组合对应,外键约束不允许为空值,但是,如果组合 外键的某列含有空值,则将跳过该外键约束的检外键的某列含有空值,则将跳过该外键约束的检 验。验。 q1利用利用Management Studio定义(删除)外定义(删除)外 键约束键约束 SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 292021-5-20 q2利用利用T-SQ
32、L语句定义(删除)外键唯一性约语句定义(删除)外键唯一性约 束束 q(1)在创建表时创建外键约束)在创建表时创建外键约束 语法格式语法格式1: CREATE TABLE 数据表名数据表名 (列名列名 数据类型数据类型 CONSTRAINT 约束名约束名 FOREIGN KEY REFERENCES 参照主键表参照主键表 (参照列参照列) ON DELETE CASCADEON UPDATE CASCADE ,) SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 302021-5-20 q 语法格式语法格式2: CREATE TABLE 数据表名数据表名 ( CO
33、NSTRAINT 约束名约束名 FOREIGN KEY (列列 ,n ) REFERENCES 参照主键表参照主键表(参照列参照列,n) ON DELETE CASCADEON UPDATE CASCADE ,) q 说明:语法格式说明:语法格式1定义单列外键约束,语法格式定义单列外键约束,语法格式2定义多列定义多列 组合外键约束。组合外键约束。 q 其中:其中:ON DELETE CASCADE表示级联删除,表示级联删除, ON UPDATE CASCADE表示级联更新,他们也称为级联参照完表示级联更新,他们也称为级联参照完 整性约束。级联参照完整性约束是为了保证外键数据的关联整性约束。级联
34、参照完整性约束是为了保证外键数据的关联 性。当删除外键引用的主键记录时,为了防止孤立外键的产性。当删除外键引用的主键记录时,为了防止孤立外键的产 生,同时删除引用它的外键记录。生,同时删除引用它的外键记录。 SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 312021-5-20 q(2)向已有表中添加外键约束)向已有表中添加外键约束 ALTER TABLE 表名表名 ADD CONSTRAINT 约束名约束名 FOREIGN KEY (列列 , n ) REFERENCES 参照主键表参照主键表(参参 照列照列, n) ON DELETE CASCADEON
35、UPDATE CASCADE ,) SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 322021-5-20 q 【例例5.12】把把cj表中的学号创建为外键,其主键为表中的学号创建为外键,其主键为xs表中的表中的 学号;课程号创建为外键,其主键为学号;课程号创建为外键,其主键为kc表中的课程号。表中的课程号。 ALTER TABLE cj ADD CONSTRAINT fk_cj_xs FOREIGN KEY(学号学号) REFERENCES xs(学号学号) ALTER TABLE cj ADD CONSTRAINT fk_cj_kc FOREIGN KEY
36、(课程号课程号) REFERENCES kc(课程号课程号) SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 332021-5-20 q(3)删除外键约束)删除外键约束 ALTER TABLE 表名表名 DROP CONSTRAINT 约束名约束名 q【例例5.13】删除外键约束。删除外键约束。 ALTER TABLE cj DROP CONSTRAINT fk_cj_xs GO ALTER TABLE cj DROP CONSTRAINT fk_cj_kc GO SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 342021-
37、5-20 q默认是一种数据库对象,可以被绑定到一个或多默认是一种数据库对象,可以被绑定到一个或多 个列上,还可以绑定到用户自定义类型上。当某个列上,还可以绑定到用户自定义类型上。当某 个默认创建后,可以反复使用。当向表中插入数个默认创建后,可以反复使用。当向表中插入数 据时,如果绑定有默认的列或者数据类型没有明据时,如果绑定有默认的列或者数据类型没有明 确提供值,那么就将以默认指定的数据插入。定确提供值,那么就将以默认指定的数据插入。定 义的默认值必须与所绑定列的数据类型一致,不义的默认值必须与所绑定列的数据类型一致,不 能违背列的相关规则。能违背列的相关规则。 SQL ServerSQL S
38、erver实用教程实用教程第5章数据完整性Page 352021-5-20 q利用利用T-SQL语句创建默认的语法格式如下。语句创建默认的语法格式如下。 qCREATE DEFAULT 默认值名称默认值名称 AS 常量表达式常量表达式 q【例例5.15】创建学时数为创建学时数为60的默认值。的默认值。 USE xsgl GO CREATE DEFAULT 学时数学时数 AS 60 GO SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 362021-5-20 q一个建好的默认值,只有绑定到表的列上或用户一个建好的默认值,只有绑定到表的列上或用户 自定义的数据类型
39、上后才起作用,如果不再需要自定义的数据类型上后才起作用,如果不再需要 该默认值,则要将该默认值从相应的列或自定义该默认值,则要将该默认值从相应的列或自定义 数据类型上解绑。利用命令的方式来绑定默认和数据类型上解绑。利用命令的方式来绑定默认和 解除绑定默认。解除绑定默认。 q其语法格式如下。其语法格式如下。 qEXECUTE sp_bindefault 默认值名称默认值名称 , 表表 名名.字段名字段名用户自定义数据类型用户自定义数据类型 qEXECUTE sp_unbindefault 表名表名.字段名字段名 用户自定义数据类型用户自定义数据类型 SQL ServerSQL Server实用教
40、程实用教程第5章数据完整性Page 372021-5-20 q 【例例5.16】将默认值学时数绑定到将默认值学时数绑定到kc表的学时数上。表的学时数上。 USE xsgl GO EXEC sp_bindefault 学时数学时数,kc.学时数学时数 GO q 【例例5.17】解除例解除例5.16中的绑定。中的绑定。 USE xsgl GO EXEC sp_unbindefault kc.学时数学时数 GO SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 382021-5-20 q可以用可以用DROP DEFAULT语句删除默认值对象。语句删除默认值对象。 q其
41、语法格式如下。其语法格式如下。 qDROP DEFAULT 默认值名称默认值名称 , q注意:在删除一个默认值之前,应首先将它从所注意:在删除一个默认值之前,应首先将它从所 绑定的列或自定义数据类型上解绑,否则系统会绑定的列或自定义数据类型上解绑,否则系统会 报错。报错。 SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 392021-5-20 q规则是保证域完整性的主要手段,它类似于规则是保证域完整性的主要手段,它类似于 CHECK约束。与约束。与CHECK约束相比,其执行功能约束相比,其执行功能 相同。相同。CHECK约束是使用约束是使用ALTER或或CRE
42、ATE TABLE的的CHECK关键字创建的,是对列中的值关键字创建的,是对列中的值 进行限制的首选标准方法(可以对一列或多列定进行限制的首选标准方法(可以对一列或多列定 义多个约束)。规则是一种数据库对象,可以绑义多个约束)。规则是一种数据库对象,可以绑 定到一列或多个列上,还可以绑定到用户自定义定到一列或多个列上,还可以绑定到用户自定义 数据类型上,规则定义之后可以反复使用。数据类型上,规则定义之后可以反复使用。 q列或用户自定义数据类型只能有一个绑定的规则。列或用户自定义数据类型只能有一个绑定的规则。 但是,列可以同时具有规则和多个但是,列可以同时具有规则和多个CHECK约束。约束。 S
43、QL ServerSQL Server实用教程实用教程第5章数据完整性Page 402021-5-20 q利用利用T-SQL语句创建规则的语法格式如下。语句创建规则的语法格式如下。 qCREATE RULE 规则名称规则名称 AS 条件表达式条件表达式 q【例例5.19】创建名为创建名为“总学分总学分”的规则,要求其的规则,要求其 取值范围在取值范围在050之间。之间。 USE xsgl GO CREATE RULE 总学分总学分 AS score=0 and score=50 GO SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 412021-5-20 q绑
44、定和解绑规则可以使用图形界面方法,也可以绑定和解绑规则可以使用图形界面方法,也可以 利用利用T-SQL语句。其语法格式如下。语句。其语法格式如下。 qsp_bindrule 规则名称规则名称, 表名表名.字段名字段名|用户自用户自 定义数据类型定义数据类型 qsp_unbindrule 表名表名.字段名字段名|用户自定义数据用户自定义数据 类型类型 q【例例5.20】将总学分规则绑定到将总学分规则绑定到xs表的总学分列表的总学分列 上。上。 qEXECUTE sp_bindrule 总学分总学分,xs.总学分总学分 SQL ServerSQL Server实用教程实用教程第5章数据完整性Pag
45、e 422021-5-20 q 由于规则是数据库对象,因此象默认一样可以利用由于规则是数据库对象,因此象默认一样可以利用 Management Studio的的“对象资源管理器对象资源管理器”展开节点到规展开节点到规 则,单击右键,在快捷菜单中选择则,单击右键,在快捷菜单中选择“删除删除”,这里我们主要,这里我们主要 介绍利用介绍利用T-SQL语句删除规则。其语法格式如下。语句删除规则。其语法格式如下。 q DROP RULE规则名称规则名称 , q 【例例5.22】删除规则删除规则“成绩成绩”和和“总学分总学分”。 EXECUTE sp_unbindrule cj.成绩成绩 EXECUTE
46、sp_unbindrule xs.总学分总学分 GO DROP RULE 成绩成绩,总学分总学分 GO SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 432021-5-20 q 表中的主键和唯一键都可以起到表中记录的标识作用,有时表中的主键和唯一键都可以起到表中记录的标识作用,有时 为了方便可以让计算机为表中的记录按照要求自动地生成标为了方便可以让计算机为表中的记录按照要求自动地生成标 识字段的值,识字段的值, q IDENTITY列即自动编号列。若在表中创建一个列即自动编号列。若在表中创建一个IDENTITY (标识符)列,则当用户向表中插入新的数据行时,
47、系统自(标识符)列,则当用户向表中插入新的数据行时,系统自 动为该行的动为该行的IDENTITY列赋值,并保证其值在表中的唯一性。列赋值,并保证其值在表中的唯一性。 每个表中只能有一个每个表中只能有一个IDENTITY列,其列值不能由用户更新,列,其列值不能由用户更新, 不允许空值,也不允许绑定默认值或建立不允许空值,也不允许绑定默认值或建立DEFAULT约束。约束。 IDENTITY列常与列常与PRIMARY KEY约束一起使用,从而保证约束一起使用,从而保证 表中各行具有唯一标识。表中各行具有唯一标识。 q 标识列的有效数据类型可以是任何整数数据类型分类的数据标识列的有效数据类型可以是任何
48、整数数据类型分类的数据 类型(类型(bit数据类型除外),也可以是数据类型除外),也可以是decimal数据类型,但数据类型,但 不允许出现小数。不允许出现小数。 SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 442021-5-20 q 1利用利用Management Studio定义定义DENTITY列列 q 2利用利用T-SQL语句创语句创IDENTITY列列 q 其语法格式如下。其语法格式如下。 CREATE TABLE 数据表名数据表名 (列名列名 数据类型数据类型 IDENTITY (种子种子,递增量递增量) ,) q 【例例5.23】在在cj表中
49、添加类型为整型的表中添加类型为整型的“编号编号”列,利列,利 用用IDENTITY使其成为初值为使其成为初值为1,依次递增,依次递增1的序列。的序列。 USE xsgl GO ALTER TABLE cj ADD 编号编号 int IDENTITY(1,1) NOT NULL GO SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 452021-5-20 q在创建和修改表时,要对表的字段指定或修改数在创建和修改表时,要对表的字段指定或修改数 据类型,在进行域完整性控制中,用户经常需要据类型,在进行域完整性控制中,用户经常需要 在系统数据类型的基础上加上适当的限制
50、,例如在系统数据类型的基础上加上适当的限制,例如 前面所讲的在前面所讲的在“电话电话”字段上,如果有多个表中字段上,如果有多个表中 均在此字段,并且对数据的约束要求是相同的,均在此字段,并且对数据的约束要求是相同的, 就要创建相应的规则,并将规则绑定到每个就要创建相应的规则,并将规则绑定到每个“电电 话话”字段上,实际上对于多个表中多个字段具有字段上,实际上对于多个表中多个字段具有 相同限制的情况,用自定义数据类型的方式来实相同限制的情况,用自定义数据类型的方式来实 现更为简洁。现更为简洁。 q在定义数据类型时,需要指定该类型的名称、使在定义数据类型时,需要指定该类型的名称、使 用的系统数据类
51、型以及是否为空等,同时默认值用的系统数据类型以及是否为空等,同时默认值 和规则可以绑定在自定义的数据类型上。和规则可以绑定在自定义的数据类型上。 SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 462021-5-20 q方法:方法: Exec sp_addtype 名称名称,系统数据类型系统数据类型,null|not null q 例:例: Exec sp_addtype xh,char(10),not null Create table xs11 ( 学号学号 xh, 姓名姓名 char(10), 性别性别 bit ) SQL ServerSQL Serve
52、r实用教程实用教程第5章数据完整性Page 472021-5-20 本章主要介绍了数据完整性技术,内容包括:本章主要介绍了数据完整性技术,内容包括: 数据完整性的概念、分类及域的完整性、实体数据完整性的概念、分类及域的完整性、实体 完整性、参照完整性的实现。需要掌握的主要完整性、参照完整性的实现。需要掌握的主要 内容如下:内容如下: (1)数据完整性的概念:数据完整性就是用于)数据完整性的概念:数据完整性就是用于 保证数据库中的数据在逻辑上的一致性、正确保证数据库中的数据在逻辑上的一致性、正确 性和可靠性。强制数据完整性可确保数据库中性和可靠性。强制数据完整性可确保数据库中 的数据质量。的数据
53、质量。 (2)数据完整性一般包括)数据完整性一般包括3种类型:域完整性、种类型:域完整性、 实体完整性、参照完整性、参照完整性。实体完整性、参照完整性、参照完整性。 SQL ServerSQL Server实用教程实用教程第5章数据完整性Page 482021-5-20 (3)域完整性的实现:域完整性是指给定字段输入的有效性,即保)域完整性的实现:域完整性是指给定字段输入的有效性,即保 证指定的字段输入的数据具有正确的数据类型、格式和有效的数据证指定的字段输入的数据具有正确的数据类型、格式和有效的数据 范围。实现域性可通过定义相应的范围。实现域性可通过定义相应的CHECK约束、默认值约束、默约束、默认值约束、默 认值对象、规则对象等方法来实现。认值对象、规则对象等方法来实现。 、CHECK约束:是字锻的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大学拓展训练课心得体会
- 期货从业资格之《期货基础知识》高分题库含答案详解(能力提升)
- 别墅外墙装修的合同范本
- 乡镇房门面出售合同范本
- 卤菜销售厂家供货合同范本
- icp托管商资质及合同协议
- 高价回收钢厂铁渣合同范本
- 制袋机设备出售合同范本
- 期货从业资格之《期货法律法规》强化训练模考卷附答案详解(精练)
- 小儿手足口病培训课件
- T/CHATA 035-2024结核病定点医疗机构消毒技术规范
- 委托生产卫生纸协议书
- 探究情侣关系中礼物形象一致性产生的原因及其对礼物交换体验的影响
- 铁路工务安全规范培训
- 2025年全国保密教育线上培训考试试题库附参考答案【完整版】附答案详解
- 超市诚信课件培训
- 防火防电防交通安全课件
- 2025年保安证考试题型分析试题及答案
- 2025年系统集成项目安全调研评估报告
- 2024辽宁交投艾特斯技术股份有限公司招聘笔试参考题库附带答案详解
- 初中文言文阅读训练50篇
评论
0/150
提交评论