




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2021-7-1211 第第9章章 数据完整性数据完整性 2021-7-1222 本章内容本章内容 n 9.1 数据完整性数据完整性 n 9.2 约束约束 n 9.3 规则规则 n 9.4 默认值默认值 2021-7-1233 9.1 数据完整性数据完整性 数据完整性是指数据库中存储数据的一致性和正确性,数据完整性是指数据库中存储数据的一致性和正确性, 确保各个文件或表中的数据值的关系一致,确保数据库中的确保各个文件或表中的数据值的关系一致,确保数据库中的 数据可以成功和正确地更新数据可以成功和正确地更新 。 数据库设计的一项重要内容是确定如何加强数据的完整数据库设计的一项重要内容是确定如何加
2、强数据的完整 性。性。 2021-7-1244 9.1 数据完整性数据完整性 n 关系数据完整性关系数据完整性 关系数据完整性包括一下内容:关系数据完整性包括一下内容: (1) 实体完整性实体完整性 实体完整性就是把表中每一条记录看作一个实体,要求实体完整性就是把表中每一条记录看作一个实体,要求 所有行都具有唯一标识,即主键,且主键的值非空,又称为所有行都具有唯一标识,即主键,且主键的值非空,又称为 行完整性行完整性 。 (2) 域完整性域完整性 域完整性是关于数据列取值有效性的限制域完整性是关于数据列取值有效性的限制 。域完整性通。域完整性通 常用有效性检查来实现,也可以通过限制数据类型、格
3、式或常用有效性检查来实现,也可以通过限制数据类型、格式或 者可能的取值范围来实现者可能的取值范围来实现 。 例如,对于例如,对于teaching数据库中数据库中s_c表中,表中,GRADE字段的取字段的取 值只能是从值只能是从0到到100的整数值,而不能为其他数值的整数值,而不能为其他数值 。 2021-7-1255 9.1 数据完整性数据完整性 (3) 参照完整性参照完整性 参照完整性是对外键取值有效性的限制,以确保数据在参照完整性是对外键取值有效性的限制,以确保数据在 另一个参照表的取值范围内另一个参照表的取值范围内 。参照完整性要求外键的取值只。参照完整性要求外键的取值只 能取参照表中的
4、有效值或空值能取参照表中的有效值或空值 。如果在参考表中某一记录的。如果在参考表中某一记录的 主键被依赖表中的外部键参考,那么这一记录既不能删除,主键被依赖表中的外部键参考,那么这一记录既不能删除, 也不能修改其主键值,以确保关键字的一致性也不能修改其主键值,以确保关键字的一致性 。 (4) 用户定义完整性用户定义完整性 用户定义完整性允许特定的不属于上述类别规则的完整用户定义完整性允许特定的不属于上述类别规则的完整 性定义,前面的性定义,前面的3个完整性类型都支持用户定义完整性。个完整性类型都支持用户定义完整性。 实现用户定义完整性,可以有两种方法,即声明数据完实现用户定义完整性,可以有两种
5、方法,即声明数据完 整性和过程数据完整性。整性和过程数据完整性。 2021-7-1266 9.1 数据完整性数据完整性 声明数据完整性声明数据完整性 声明数据完整性是通过在对象定义中定义的标准来实现声明数据完整性是通过在对象定义中定义的标准来实现 数据完整性,是由系统本身的自动强制来实现的,它包括使数据完整性,是由系统本身的自动强制来实现的,它包括使 用各种约束、缺省的规则。用各种约束、缺省的规则。 过程数据完整性过程数据完整性 过程数据完整性是通过在脚本语言中定义的完整性标准过程数据完整性是通过在脚本语言中定义的完整性标准 来实现的,当执行这些脚本时,就可以强制完整性的实现来实现的,当执行这
6、些脚本时,就可以强制完整性的实现 。 过程数据完整性的方式包括使用触发器和存储过程等。过程数据完整性的方式包括使用触发器和存储过程等。 2021-7-1277 9.1 数据完整性数据完整性 n SQL Server 2005中的数据完整性中的数据完整性 各类数据完整性和对应实现完整性的各类数据完整性和对应实现完整性的SQL Server组件如表组件如表9.1所示所示 。 数据完整性数据完整性 对应的对应的SQL Server组件组件 实体完整性实体完整性 PRIMARY KEY(主键主键)约束、约束、UNIQUE(唯一唯一) 约束约束UNIQUE INDEX(唯一索引唯一索引)、 IDENTI
7、TY COLUMN(标识列标识列) 域完整性域完整性 DEFAULT(默认值默认值)、CHECK(检查检查)约束、约束、 RULE(规则规则)FOREIGN KEY(外键外键)约束、约束、 DATA TYPE(数据类型数据类型) 参照完整性参照完整性 FOREIGN KEY (外键外键)约束、约束、CHECK (检查检查) 约束约束TRIGGER(触发器触发器)、STORED PROCEDURE(存储过程存储过程) 用户定义完整性用户定义完整性 RULE(规则规则)、TRIGGER(触发器触发器)、 STORED PROCEDURE(存储过程存储过程) 2021-7-1288 9.1 数据完整
8、性数据完整性 (1) 空值空值 数据表中的列可以接受空值,也可以拒绝空值。在数据数据表中的列可以接受空值,也可以拒绝空值。在数据 库中,库中,NULL是一个特殊值,表示未知值的概念。是一个特殊值,表示未知值的概念。 NULL不同于空字符或不同于空字符或0。空字符是一个有效的字符,。空字符是一个有效的字符,0是是 一个有效的数字。一个有效的数字。NULL只是表示此值未知这一概念。只是表示此值未知这一概念。 NULL也不同于零长度字符串也不同于零长度字符串(空串空串)。 如果列定义中包含如果列定义中包含NOT NULL子句,则不能为该列输入子句,则不能为该列输入 NULL值。如果列定义中仅包含值。
9、如果列定义中仅包含NULL关键字,则接受关键字,则接受 NULL值值 2021-7-1299 9.1 数据完整性数据完整性 (2) 约束约束 约束定义关于列中允许值的规则,是强制实施完整性的约束定义关于列中允许值的规则,是强制实施完整性的 标准机制。使用约束优先于使用标准机制。使用约束优先于使用DML触发器触发器、规则规则和和默认默认 值值 。 约束类型约束类型 SQL Server 2005有下列约束类型有下列约束类型 : NOT NULL约束约束 :非空约束,指定列不接受:非空约束,指定列不接受NULL值值 . CHECK约束约束 :检查约束,通过限制可输入到列中的值:检查约束,通过限制可
10、输入到列中的值 来强制实施域完整性来强制实施域完整性 。 a. UNIQUE约束:唯一约束,强制实施列取值集合中值的约束:唯一约束,强制实施列取值集合中值的 唯一性。主键强制实施唯一性,但主键不允许唯一性。主键强制实施唯一性,但主键不允许NULL作为一作为一 个唯一值。个唯一值。 2021-7-121010 9.1 数据完整性数据完整性 d. PRIMARY KEY约束:主键约束,标识具有唯一标识约束:主键约束,标识具有唯一标识 表中行的值的列或列集表中行的值的列或列集 。 e. FOREIGN KEY约束:外键约束,标识并强制实施表约束:外键约束,标识并强制实施表 之间的关系之间的关系 。
11、列约束和表约束列约束和表约束 列约束指定为列定义的一部分,并且只应用于该列。表列约束指定为列定义的一部分,并且只应用于该列。表 约束的声明与列定义无关,可以应用于表中多个列约束的声明与列定义无关,可以应用于表中多个列 。当一个。当一个 约束中必须包含多个列时,应使用表约束。约束中必须包含多个列时,应使用表约束。 2021-7-121111 9.1 数据完整性数据完整性 (3) 规则规则 规则用于执行一些与规则用于执行一些与CHECK约束相同的功能。使用约束相同的功能。使用 CHECK约束是限制列值的首选标准方法。约束是限制列值的首选标准方法。CHECK约束还约束还 比规则更简明。一个列只能应用
12、一个规则,但可以应用多个比规则更简明。一个列只能应用一个规则,但可以应用多个 CHECK约束。约束。CHECK约束被指定为约束被指定为CREATE TABLE语句语句 的一部分,而规则是作为单独的对象创建,然后绑定到列上。的一部分,而规则是作为单独的对象创建,然后绑定到列上。 2021-7-121212 9.1 数据完整性数据完整性 (4) 默认值默认值 如果插入行时没有为列指定值,默认值则指定列中默认如果插入行时没有为列指定值,默认值则指定列中默认 取值。默认值可以是计算结果为常量的任何值,例如常量、取值。默认值可以是计算结果为常量的任何值,例如常量、 内置函数或数学表达式。内置函数或数学表
13、达式。 若要应用默认值,可以通过在若要应用默认值,可以通过在CREATE TABLE中使用中使用 DEFAULT关键字来创建默认值定义。这将为每一列分配一关键字来创建默认值定义。这将为每一列分配一 个常量表达式作为默认值,也可以作为单独的对象创建,然个常量表达式作为默认值,也可以作为单独的对象创建,然 后绑定到列上。后绑定到列上。 2021-7-121313 9.2 约束约束 约束是通过限制字段中数据、记录中数据和表之间的数约束是通过限制字段中数据、记录中数据和表之间的数 据来保证数据完整性据来保证数据完整性 。 约束独立于表结构,创建约束有两种方法约束独立于表结构,创建约束有两种方法 : 创
14、建表时在创建表时在CREATE TABLE命令中声明;命令中声明; 在不改变表结构的基础上,通过修改表结构命令在不改变表结构的基础上,通过修改表结构命令ALTER TABLE添加或删除添加或删除 。 当表被删除时,表所带的所有约束定义也随之被删除。当表被删除时,表所带的所有约束定义也随之被删除。 2021-7-121414 9.2 约束约束 表表9.2 所有可用的约束类型所有可用的约束类型 完整性类型完整性类型 约束类型约束类型 域完整性域完整性 DEFAULT(默认值默认值)、CHECK(检检 查查)约束约束 实体完整性实体完整性 PRIMARY KEY(主键主键)约束、约束、 UNIQUE
15、(唯一唯一)约束约束 参照完整性参照完整性 FOREIGN KEY(外键外键)约束约束 2021-7-121515 9.2 约束约束 n 主键约束主键约束 在数据表中经常有一列或多列的组合,其值能唯一地标在数据表中经常有一列或多列的组合,其值能唯一地标 识表中的每一行。这样的一列或多列称为表的主键识表中的每一行。这样的一列或多列称为表的主键 。 通过它可强制表的实体完整性,以确保数据表中数据的通过它可强制表的实体完整性,以确保数据表中数据的 唯一性唯一性 。 当创建或更改表时,可通过定义当创建或更改表时,可通过定义PRIMARY KEY (主键主键) 约束来创建主键。约束来创建主键。 2021
16、-7-121616 9.2 约束约束 对于主键约束,需满足以下规则。对于主键约束,需满足以下规则。 一个表只能包含一个一个表只能包含一个PRIMARY KEY约束。约束。 由由PRIMARY KEY约束生成的索引不会使表中的非约束生成的索引不会使表中的非 聚集索引超过聚集索引超过249个,聚集索引超过个,聚集索引超过1个。个。 如果没有为如果没有为PRIMARY KEY约束指定约束指定CLUSTERED 或或NONCLUSTERED,并且没有为,并且没有为UNIQUE约束指定约束指定 聚集索引,则将对该聚集索引,则将对该PRIMARY KEY约束使用约束使用 CLUSTERED。 在在PRIM
17、ARY KEY约束中定义的所有列都必须定义约束中定义的所有列都必须定义 为为NOT NULL。如果没有指定为空性,则加入。如果没有指定为空性,则加入 PRIMARY KEY约束的所有列的为空性都将设置为约束的所有列的为空性都将设置为 NOT NULL。 2021-7-121717 9.2 约束约束 (1) 创建表时声明主键约束创建表时声明主键约束 如果表的主键由单列组成,则该主键约束可以定义为该如果表的主键由单列组成,则该主键约束可以定义为该 列的列约束。如果主键由两个以上的列组成,则该主键约束列的列约束。如果主键由两个以上的列组成,则该主键约束 必须定义为表约束必须定义为表约束 。 定义列级
18、主键约束定义列级主键约束 语法格式如下:语法格式如下: CONSTRAINT constraint_name PRIMARY KEY CLUSTERED | NONCLUSTERED 2021-7-121818 9.2 约束约束 CONSTRAINT:可选关键字,表示:可选关键字,表示PRIMARY KEY、 NOT NULL、UNIQUE、FOREIGN KEY或或CHECK约束定约束定 义的开始义的开始 。 constraint_name:约束的名称。约束名称必须在表所属:约束的名称。约束名称必须在表所属 的架构中唯一。的架构中唯一。 PRIMARY KEY:是通过唯一索引对给定的一列或多
19、列:是通过唯一索引对给定的一列或多列 强制实体完整性的约束。每个表只能创建一个强制实体完整性的约束。每个表只能创建一个 PRIMARY KEY 约束约束 。 CLUSTERED | NONCLUSTERED:指示为:指示为PRIMARY KEY约束创建聚集索引还是非聚集索引。约束创建聚集索引还是非聚集索引。PRIMARY KEY 约束默认为约束默认为CLUSTERED。 2021-7-121919 9.2 约束约束 定义表级主键约束定义表级主键约束 语法格式如下。语法格式如下。 CONSTRAINT constraint_name PRIMARY KEY CLUSTERED | NONCLUS
20、TERED ( column_name ,.n ) 其中,其中,column_name ,.n 指定组成主键的列名,指定组成主键的列名,n最大最大 值为值为16。 2021-7-122020 9.2 约束约束 (2) 修改表时创建主键约束修改表时创建主键约束 语法格式如下。语法格式如下。 ALTER TABLE table_name ADD CONSTRAINT Constraint_name PRIMARY KEY CLUSTERED | NONCLUSTERED ( column_name ,n ) 2021-7-122121 9.2 约束约束 例如:假设在例如:假设在teaching数据
21、库中的数据库中的s_c表中没有设置主键表中没有设置主键 约束,以下示例通过约束,以下示例通过ALTER TABLE命令添加主键约束命令添加主键约束 。 USE teaching GO ALTER TABLE s_c ADD CONSTRAINT PK_sc PRIMARY KEY (SNO, CNO) GO 通过通过ALTER TABLE命令也可以删除不使用的主键约束,命令也可以删除不使用的主键约束, 命令格式如下。命令格式如下。 ALTER TABLE table_name DROP CONSTRAINT constraint_name 2021-7-122222 9.2 约束约束 n 外键
22、约束外键约束 通过将用于保存表中主键值的一列或多列添加到另一个通过将用于保存表中主键值的一列或多列添加到另一个 表中,可创建两个表之间的链接。这个列就成为第二个表的表中,可创建两个表之间的链接。这个列就成为第二个表的 外键。外键。 外键用于建立和加强两个表数据之间的链接的一列或多外键用于建立和加强两个表数据之间的链接的一列或多 列。列。 当创建或更改表时,可以通过定义当创建或更改表时,可以通过定义FOREIGN KEY约束约束 来创建外键。来创建外键。 2021-7-122323 9.2 约束约束 对于外键约束,需要满足以下规则。对于外键约束,需要满足以下规则。 如果在如果在FOREIGN K
23、EY约束的列中输入非约束的列中输入非NULL值,则此值必值,则此值必 须在被引用列中存在;否则,将返回违反外键约束的错误信息。须在被引用列中存在;否则,将返回违反外键约束的错误信息。 FOREIGN KEY约束仅能引用位于同一服务器上的同一数据约束仅能引用位于同一服务器上的同一数据 库中的表。跨数据库的参照完整性必须通过触发器实现。库中的表。跨数据库的参照完整性必须通过触发器实现。 FOREIGN KEY约束可引用同一表中的其他列,此行为称为约束可引用同一表中的其他列,此行为称为 自引用。自引用。 列级列级FOREIGN KEY约束的约束的REFERENCES子句只能列出一个子句只能列出一个
24、引用列。此列的数据类型必须与定义约束的列的数据类型相同。引用列。此列的数据类型必须与定义约束的列的数据类型相同。 表级表级FOREIGN KEY约束的约束的REFERENCES子句中引用列的数子句中引用列的数 目必须与约束列列表中的列数相同。每个引用列的数据类型也必目必须与约束列列表中的列数相同。每个引用列的数据类型也必 须与列表中相应列的数据类型相同。须与列表中相应列的数据类型相同。 FOREIGN KEY约束只能引用所参照的表的约束只能引用所参照的表的PRIMARY KEY 或或UNIQUE约束中的列或所引用的表上约束中的列或所引用的表上UNIQUE INDEX中的列。中的列。 2021-
25、7-122424 9.2 约束约束 (1) 创建表时声明外键约束创建表时声明外键约束 语法格式如下。语法格式如下。 CONSTRAINT constraint_name FOREIGN KEY REFERENCES schema_name . referenced_table_name ( ref_column ) ON DELETE NO ACTION | CASCADE | SET NULL | SET DEFAULT ON UPDATE NO ACTION | CASCADE | SET NULL | SET DEFAULT 2021-7-122525 9.2 约束约束 FOREIGN
26、KEY REFERENCES:为列中的数据提供参:为列中的数据提供参 照完整性的约束。照完整性的约束。FOREIGN KEY 约束要求列中的每个值在约束要求列中的每个值在 所引参照的表中对应的被引用列中都存在。所引参照的表中对应的被引用列中都存在。 schema_name . referenced_table_name:是:是FOREIGN KEY约束参照的表的名称,以及该表所属架构的名称。约束参照的表的名称,以及该表所属架构的名称。 ( ref_column ,. n ):是:是FOREIGN KEY约束所引用的约束所引用的 表中的一列或多列表中的一列或多列 。 ON DELETE NO A
27、CTION | CASCADE | SET NULL | SET DEFAULT :指定如果已创建表中的行具有引用关系,:指定如果已创建表中的行具有引用关系, 并且被引用行已从父表中删除,则对这些行采取的操作。默并且被引用行已从父表中删除,则对这些行采取的操作。默 认值为认值为NO ACTION。 2021-7-122626 9.2 约束约束 NO ACTION:数据库引擎将引发错误,并回滚对父表中:数据库引擎将引发错误,并回滚对父表中 相应行的删除操作。相应行的删除操作。 CASCADE:如果从父表中删除一行,则将从引用表中:如果从父表中删除一行,则将从引用表中 删除相应行。删除相应行。 S
28、ET NULL:如果父表中对应的行被删除,则组成外键:如果父表中对应的行被删除,则组成外键 的所有值都将设置为的所有值都将设置为NULL。若要执行此约束,外键列必须。若要执行此约束,外键列必须 可为空值。可为空值。 SET DEFAULT:如果父表中对应的行被删除,则组成外:如果父表中对应的行被删除,则组成外 键的所有值都将设置为默认值。若要执行此约束,所有外键键的所有值都将设置为默认值。若要执行此约束,所有外键 列都必须有默认定义。如果某列为空值,并且未设置显式的列都必须有默认定义。如果某列为空值,并且未设置显式的 默认值,则将使用默认值,则将使用NULL作为该列的隐式默认值。作为该列的隐式
29、默认值。 2021-7-122727 9.2 约束约束 ON UPDATE NO ACTION | CASCADE | SET NULL | SET DEFAULT :指定在发生更改的表中,如果行有引用:指定在发生更改的表中,如果行有引用 关系且引用的行在父表中被更新,则对这些行采取什么操作。关系且引用的行在父表中被更新,则对这些行采取什么操作。 默认值为默认值为NO ACTION 。 2021-7-122828 9.2 约束约束 外键约束不仅可以与一张表上的主键约束建立联系,也外键约束不仅可以与一张表上的主键约束建立联系,也 可以与另一张表上的可以与另一张表上的UNIQUE约束建立联系。当一
30、行新的数约束建立联系。当一行新的数 据被加入到表格中,或表格中已经存在的外键上的数据进行据被加入到表格中,或表格中已经存在的外键上的数据进行 修改时,新的数据必须存在于另一张表的主键上,或者为修改时,新的数据必须存在于另一张表的主键上,或者为 NULL 。 在外键约束上允许存在为在外键约束上允许存在为NULL的值的值 。 当主键所在表的数据被另一张表的外键所引用时,用户当主键所在表的数据被另一张表的外键所引用时,用户 将无法对主键里的数据进行修改或删除,除非事先删除或修将无法对主键里的数据进行修改或删除,除非事先删除或修 改引用的数据。改引用的数据。 2021-7-122929 9.2 约束约
31、束 (2) 修改表时创建外键约束修改表时创建外键约束 语法格式如下。语法格式如下。 ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY( column ,n ) REFERENCES ref_table( ref_column ,n ) 2021-7-123030 9.2 约束约束 例如:假设在例如:假设在teaching数据库中的数据库中的s_c表中没有设置外键约束,以下示例通过表中没有设置外键约束,以下示例通过 ALTER TABLE命令添加外键约束。命令添加外键约束。 USE teaching GO ALTE
32、R TABLE s_c ADD CONSTRAINT FK_sc_sno FOREIGN KEY (SNO) REFERENCES student(SNO) GO ALTER TABLE s_c ADD CONSTRAINT FK_sc_cno FOREIGN KEY (CNO) REFERENCES course(CNO) GO 通过通过ALTER TABLE命令也可以删除不使用的外键约束,命令格式如下。命令也可以删除不使用的外键约束,命令格式如下。 ALTER TABLE table_name DROP CONSTRAINT constraint_name,n 2021-7-123131
33、9.2 约束约束 n UNIQUE(唯一唯一)约束约束 对于数据表中非主键列的指定列,唯一约束确保不会输对于数据表中非主键列的指定列,唯一约束确保不会输 入重复的值。每个入重复的值。每个UNIQUE约束建立一个唯一索引。每个表约束建立一个唯一索引。每个表 中只能有一个主键,但是可以有多个中只能有一个主键,但是可以有多个UNIQUE列。唯一约束列。唯一约束 指定的列可以有指定的列可以有NULL值。表中的主键也强制执行唯一性,值。表中的主键也强制执行唯一性, 但主键不允许为但主键不允许为NULL,主键约束强度大于唯一约束。,主键约束强度大于唯一约束。 唯一约束需满足以下规则。唯一约束需满足以下规则
34、。 如果没有为如果没有为UNIQUE约束指定约束指定CLUSTERED或或 NONCLUSTERED,则默认使用,则默认使用NONCLUSTERED。 每个每个UNIQUE约束都生成一个索引。约束都生成一个索引。UNIQUE约束约束 的数目不会使表中的非聚集索引超过的数目不会使表中的非聚集索引超过249个,聚集索引个,聚集索引 超过超过1个。个。 2021-7-123232 9.2 约束约束 (1) 创建表时声明唯一约束创建表时声明唯一约束 如果表的唯一约束由单列组成,则该唯一约束可以定义如果表的唯一约束由单列组成,则该唯一约束可以定义 为该列的列约束。如果唯一约束由两个以上的列组成,则该为该
35、列的列约束。如果唯一约束由两个以上的列组成,则该 唯一约束必须定义为表约束。唯一约束必须定义为表约束。 定义列级主键约束定义列级主键约束 语法格式如下。语法格式如下。 CONSTRAINT constraint_name UNIQUE CLUSTERED | NONCLUSTERED UNIQUE:唯一约束:唯一约束 。 CLUSTERED | NONCLUSTERED:指示为:指示为UNIQUE约约 束创建聚集索引还是非聚集索引。束创建聚集索引还是非聚集索引。 2021-7-123333 9.2 约束约束 定义表级唯一约束定义表级唯一约束 语法格式如下。语法格式如下。 CONSTRAINT
36、constraint_name UNIQUE CLUSTERED | NONCLUSTERED ( column_name ,.n ) (2) 修改表时创建唯一约束修改表时创建唯一约束 语法格式如下。语法格式如下。 ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE( column ,n ) 2021-7-123434 9.2 约束约束 例如:以下示例将例如:以下示例将teaching数据库中的数据库中的student表中的姓名列设置为表中的姓名列设置为 唯一约束。唯一约束。 USE teaching GO ALTER TA
37、BLE student ADD CONSTRAINT UQ_student UNIQUE (SNAME) 通过通过ALTER TABLE命令也可以删除不使用的唯一约束,命令格式命令也可以删除不使用的唯一约束,命令格式 如下。如下。 ALTER TABLE table_name DROP CONSTRAINT constraint_name,n 2021-7-123535 9.2 约束约束 n 检查约束检查约束 检查检查(CHECK)约束通过检查输入表列的数据的值来维护约束通过检查输入表列的数据的值来维护 值域的完整性,它可用来指定某列可取值的清单或可取值的值域的完整性,它可用来指定某列可取值的
38、清单或可取值的 集合,也可指定某列可取值的范围集合,也可指定某列可取值的范围 。 可以在一列上设置多个检查约束,也可以将一个检查约可以在一列上设置多个检查约束,也可以将一个检查约 束应用于多列。当一列受多个检查约束控制时,所有的约束束应用于多列。当一列受多个检查约束控制时,所有的约束 按照创建的顺序,依次进行数据有效性的检查。按照创建的顺序,依次进行数据有效性的检查。 根据检查约束是作用于单列还是多列,可分为列级检查根据检查约束是作用于单列还是多列,可分为列级检查 约束和表级检查约束。约束和表级检查约束。 2021-7-123636 9.2 约束约束 对于检查约束,需满足以下规则。对于检查约束
39、,需满足以下规则。 列可以有任意多个列可以有任意多个CHECK约束,并且约束条件中可以包含用约束,并且约束条件中可以包含用 AND和和OR组合起来的多个逻辑表达式。列上的多个组合起来的多个逻辑表达式。列上的多个CHECK约束约束 按创建顺序进行验证。按创建顺序进行验证。 搜索条件必须取值为布尔表达式,并且不能引用其他表。搜索条件必须取值为布尔表达式,并且不能引用其他表。 列级列级CHECK约束只能引用被约束的列,表级约束只能引用被约束的列,表级CHECK约束只约束只 能引用同一表中的列。能引用同一表中的列。 当执行当执行INSERT和和DELETE语句时,语句时,CHECK 约束和规则具有约束
40、和规则具有 相同的数据验证功能。相同的数据验证功能。 当列上存在规则和一个或多个当列上存在规则和一个或多个CHECK约束时,将验证所有限约束时,将验证所有限 制。制。 不能在不能在text、ntext或或image列上定义列上定义CHECK约束。约束。 2021-7-123737 9.2 约束约束 (1)创建表时声明唯一约束创建表时声明唯一约束 语法格式如下。语法格式如下。 CONSTRAINT constraint_name CHECK (logical_expression) 各选项含义如下各选项含义如下 : CHECK:检查约束。该约束通过限制可输入一列或多:检查约束。该约束通过限制可输
41、入一列或多 列中的可能值来强制实现域完整性。列中的可能值来强制实现域完整性。 logical_expression:返回:返回TRUE或或FALSE的逻辑表达式。的逻辑表达式。 别名数据类型不能作为表达式的一部分别名数据类型不能作为表达式的一部分 。 2021-7-123838 9.2 约束约束 (2)修改表时创建检查约束修改表时创建检查约束 语法格式如下。语法格式如下。 ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK(logical_expression) 2021-7-123939 9.2 约束约束 例如:假设在例如:
42、假设在teaching数据库中的数据库中的s_c表中没有设置对成绩列的检查表中没有设置对成绩列的检查 约束,以下示例通过约束,以下示例通过ALTER TABLE命令添加检查约束命令添加检查约束 。 USE teaching GO ALTER TABLE s_c ADD CONSTRAINT CK_sc CHECK(GRADE=0 AND GRADE=0 and Grade=100 GO 2021-7-124646 9.3 规则规则 n 查看规则查看规则 可以使用系统存储过程可以使用系统存储过程sp_helptext查看已经创建的规则,查看已经创建的规则, 语法格式如下。语法格式如下。 sp_h
43、elptext objname= object_name 其中:其中: objname=object_name:指定对象的名称。:指定对象的名称。 例如:以下示例查看已经创建的规则例如:以下示例查看已经创建的规则grade_rule。 USE teaching GO EXEC sp_helptext grade_rule GO 执行结果如图执行结果如图9.1所示所示 。 2021-7-124747 9.3 规则规则 n 绑定与解除规则绑定与解除规则 1. 绑定规则绑定规则 创建好一个规则后,必须通过绑定才能使用规则,一般创建好一个规则后,必须通过绑定才能使用规则,一般 情况下,规则可以绑定在用
44、户自定义数据类型或是数据列中。情况下,规则可以绑定在用户自定义数据类型或是数据列中。 绑定规则可以使用存储过程绑定规则可以使用存储过程sp_bindrule,语法格式如下,语法格式如下 : sp_bindrule rulename=rule, objname=object_name rulename=rule:指定规则名称:指定规则名称 。 objname=object_name:指定规则绑定的对象:指定规则绑定的对象 。 2021-7-124848 9.3 规则规则 如果规则绑定的对象是表的列,则如果规则绑定的对象是表的列,则object_name的格式是的格式是 table.column,
45、否则认为是用户定义数据类型。,否则认为是用户定义数据类型。 例如:以下示例将例例如:以下示例将例9.7创建的规则创建的规则grade_rule绑定到绑定到 teaching数据库中的数据库中的s_c表中的表中的GRADE列上列上 。 USE teaching GO EXEC sp_bindrule grade_rule,s_c.GRADE GO 2021-7-124949 9.3 规则规则 2. 解除规则解除规则 系统存储过程系统存储过程sp_unbindrule用于当前数据库中为列或用用于当前数据库中为列或用 户定义数据类型解除规则绑定户定义数据类型解除规则绑定 。 语法格式如下。语法格式如
46、下。 sp_unbindrule objname=object_name 例如:解除绑定在例如:解除绑定在teaching数据库中的数据库中的s_c表中表中GRADE列列 上的规则上的规则 。 USE teaching GO EXEC sp_unbindrule s_c.GRADE GO 2021-7-125050 9.3 规则规则 n 删除规则删除规则 从数据库中删除一个规则值时,可以分为以下两种情况从数据库中删除一个规则值时,可以分为以下两种情况 来处理。来处理。 如果这个规则尚未绑定到表或用户定义数据类型上,可如果这个规则尚未绑定到表或用户定义数据类型上,可 以使用以使用DROP RUL
47、E语句来删除。语句来删除。 如果已经将这个规则绑定到表或用户定义数据类型上,如果已经将这个规则绑定到表或用户定义数据类型上, 必须首先使用系统存储过程必须首先使用系统存储过程sp_unbindrule来解除该规则在表来解除该规则在表 列或用户定义数据类型上的绑定,然后使用列或用户定义数据类型上的绑定,然后使用DROP RULE语语 句删除该规则。句删除该规则。 2021-7-125151 9.3 规则规则 可以使用可以使用Transact-SQL命令的命令的DROP RULE语句从数据语句从数据 库删除一个或多个规则库删除一个或多个规则 。 其语法格式如下。其语法格式如下。 DROP RULE
48、 rule_name,n 例如:删除例如:删除teaching数据库中的规则数据库中的规则grade_rule 。 USE teaching GO DROP RULE grade_rule GO 2021-7-125252 9.4 默认值默认值 默认值就是当用户未指定时由默认值就是当用户未指定时由SQL Server自动指派的数自动指派的数 据值,它可以是常量、内置函数或表达式据值,它可以是常量、内置函数或表达式 。 使用默认值有两种方式使用默认值有两种方式 : 在在CREATE TABLE语句中对列定义一个语句中对列定义一个DEFAULT约束约束 使用使用CREATE DEFAULT语句在数
49、据库中创建一个默认语句在数据库中创建一个默认 值对象,然后使用值对象,然后使用sp_binddefault系统存储过程将该对象绑系统存储过程将该对象绑 定到表列上定到表列上 。 2021-7-125353 9.4 默认值默认值 n 创建默认值创建默认值 1. 创建默认值对象可以使用创建默认值对象可以使用Transact-SQL命令命令CREATE DEFAULT语句来完成语句来完成 。 语法格式如下。语法格式如下。 CREATE DEFAULT default_name AS constant_expression 其中:其中: constant_expression可以是常量表达式、任何常量
50、、内置可以是常量表达式、任何常量、内置 函数或数学表达式,但不能包含任何列或其他数据库对象的函数或数学表达式,但不能包含任何列或其他数据库对象的 名称。名称。 2021-7-125454 9.4 默认值默认值 例如:在例如:在teaching数据库中创建一个名为数据库中创建一个名为grade_default的的 默认值,并以默认值,并以0作为其值。作为其值。 USE teaching GO CREATE DEFAULT grade_default AS 0 GO 2021-7-125555 9.4 默认值默认值 2. 可以使用系统存储过程可以使用系统存储过程sp_helptext查看默认值定义
51、,查看默认值定义, 语法格式如下。语法格式如下。 sp_helptext objname = name name为用户定义的对象名称。仅当指定限定对象时才需为用户定义的对象名称。仅当指定限定对象时才需 要引号。对象必须在当前数据库中要引号。对象必须在当前数据库中 。 例如:查看已经创建的默认值例如:查看已经创建的默认值grade_default。 USE teaching GO EXEC sp_helptext grade_default GO 执行结果如图执行结果如图9.2所示所示 2021-7-125656 9.4 默认值默认值 n 绑定与解除默认值绑定与解除默认值 1. 绑定默认值绑定默
52、认值 在数据库中创建一个默认值后,还必须把该默认值绑定在数据库中创建一个默认值后,还必须把该默认值绑定 到列或用户定义数据类型上才能让它发挥作用。到列或用户定义数据类型上才能让它发挥作用。 可以用系统存储过程可以用系统存储过程sp_binddefault来完成来完成 ,其语法格式,其语法格式 如下如下 : sp_bindefault defname=default,objname=object_name 2021-7-125757 9.4 默认值默认值 例如:以下示例将例例如:以下示例将例9.14创建的默认值创建的默认值grade_default绑定绑定 到到teaching数据库中的数据库中的s_c表中表中GRADE列上列上 。 USE teaching GO EXEC sp_bindefault grade_default,s_c.GRADE G
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年咖啡连锁经营项目发展计划
- 装配式建筑培训
- 《农民的好帮手-农具》(教学设计)-2023-2024学年五年级下册综合实践活动沪科黔科版
- 2025年海北货运从业资格证模拟考试下载题
- 2025年云浮货运从业资格证模拟考试题
- 2025年矿用防爆电器设备项目合作计划书
- 2025年宁德货运资格证考试题
- 三年级上册数学教案-1.1 整十、整百数乘一位数丨苏教版
- 2025年岳阳下载货运从业资格证模拟考试
- 2025年宝鸡驾驶员货运从业资格证模拟考试题
- 小学部编五下快乐读书吧整本书阅读-《西游记》阅读指导课教学设计
- 中药药剂学:第十四章-胶囊剂
- 高中英语-what's in a name教学课件设计
- 德能勤绩考核评价表
- 新译林牛津版英语八年级上册Unit1-Friends复习优质课公开课课件
- 语文版-三年级下-第五单元-17 张衡和他的地动仪
- 2023年河北石家庄市市属国有企业面向社会招聘笔试参考题库附带答案详解
- 加弹机操作规程
- 2022年无锡商业职业技术学院单招综合素质试题及答案解析
- 监理工程师个人工作总结模板(3篇)
- 中国女排演讲ppt
评论
0/150
提交评论