《06_实现数据完整性.ppt》由会员分享,可在线阅读,更多相关《06_实现数据完整性.ppt(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第六章第六章 实现数据完整性实现数据完整性v 数据完整性概述数据完整性概述v 使用约束实现数据完整性使用约束实现数据完整性 主键、惟一、核查主键、惟一、核查 默认、外键约束默认、外键约束v 使用规则实现数据完整性使用规则实现数据完整性v 使用默认值实现数据完整性使用默认值实现数据完整性第六章第六章 实现数据完整性实现数据完整性v 数据完整性概述数据完整性概述 数据完整性就是指存储在数据库中的数据正确无误并数据完整性就是指存储在数据库中的数据正确无误并且相关数据具有一致性。数据库中是否存在完整的数据关且相关数据具有一致性。数据库中是否存在完整的数据关系到数据库系统能否真实地反映现实世界。它是衡量
2、数据系到数据库系统能否真实地反映现实世界。它是衡量数据库中数据质量好坏的一种标志,是确保正确的数据被存放库中数据质量好坏的一种标志,是确保正确的数据被存放在正确的位置的一种手段。在正确的位置的一种手段。根据数据完整性机制所作用的数据库对象和范围不同,根据数据完整性机制所作用的数据库对象和范围不同,数据完整性可分数据完整性可分:实体完整性实体完整性 值域完整性值域完整性 引用完整性引用完整性 用户定义完整性用户定义完整性第六章第六章 实现数据完整性实现数据完整性v 数据完整性概述数据完整性概述1、实体完整性、实体完整性 这里的实体指表中的记录,一个实体就是表中的一条记录。实体这里的实体指表中的记
3、录,一个实体就是表中的一条记录。实体完整性要求在表中不能存在完全相同的记录,而且每条记录都要具有完整性要求在表中不能存在完全相同的记录,而且每条记录都要具有一个非空且不重复的键值。这样就可以保证数据所代表的任何事物都一个非空且不重复的键值。这样就可以保证数据所代表的任何事物都不存在重复。不存在重复。实现实体完整性的方法主要有主键约束、唯一索引、唯一约束和实现实体完整性的方法主要有主键约束、唯一索引、唯一约束和指定指定IDENTITY属性属性 2、域完整性、域完整性 组成记录的列称为域,域完整性也可称为列完整性。域完整性要组成记录的列称为域,域完整性也可称为列完整性。域完整性要求向表中指定列输入
4、的数据必须具有正确的数据类型、格式以及有效求向表中指定列输入的数据必须具有正确的数据类型、格式以及有效的数据范围。的数据范围。实现域完整性的方法主要有实现域完整性的方法主要有CHECK约束、外键约束、默认约束、约束、外键约束、默认约束、非空定义、规则以及在建表时设置的数据类型。非空定义、规则以及在建表时设置的数据类型。第六章第六章 实现数据完整性实现数据完整性v 数据完整性概述数据完整性概述3、引用完整性、引用完整性 引用完整性又称为参照完整性。引用完整性是指作用于有关联的引用完整性又称为参照完整性。引用完整性是指作用于有关联的两个或两个以上的表,通过使用主键和外键或主键和唯一键之间的关两个或
5、两个以上的表,通过使用主键和外键或主键和唯一键之间的关系,使表中的键值在所有表中保持一致。系,使表中的键值在所有表中保持一致。实现引用完整性的方法主要有外键约束。实现引用完整性的方法主要有外键约束。4、用户定义的完整性、用户定义的完整性 用户定义的完整性是应用领域需要遵守的约束条件,其允许用户用户定义的完整性是应用领域需要遵守的约束条件,其允许用户定义不属于其他任何完整性分类的特定业务规则。所有的完整性类型定义不属于其他任何完整性分类的特定业务规则。所有的完整性类型都支持用户定义完整性。都支持用户定义完整性。第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完
6、整性约束是约束是SQL Server提供的自动强制数据完整性的一种方法,它是通过提供的自动强制数据完整性的一种方法,它是通过定义列的取值规则来维护数据的完整性。定义列的取值规则来维护数据的完整性。约束的类型:约束的类型:PRIMARY KEY(主键)约束(主键)约束主键约束用来强制数据的实体完整性,它是在表中定义一个主键约束用来强制数据的实体完整性,它是在表中定义一个主键主键来唯一标识来唯一标识表中的每行记录。主键约束有如下特点:每个表中只能有一个主键,主键可表中的每行记录。主键约束有如下特点:每个表中只能有一个主键,主键可以是一列,也可以是多列的组合;主键值必须唯一并且不能为空,对于多列以是
7、一列,也可以是多列的组合;主键值必须唯一并且不能为空,对于多列组合的主键,某列值可以重复,但列的组合值必须唯一。组合的主键,某列值可以重复,但列的组合值必须唯一。UNIQUE(唯一)约束(唯一)约束唯一约束用来强制数据的实体完整性,它主要用来限制表的非主键列中不允唯一约束用来强制数据的实体完整性,它主要用来限制表的非主键列中不允许输入重复值。唯一约束有如下特点:一个表中可以定义多个唯一约束;每许输入重复值。唯一约束有如下特点:一个表中可以定义多个唯一约束;每个唯一约束可以定义到一列上,也可以定义到多列上;空值可以出现在某列个唯一约束可以定义到一列上,也可以定义到多列上;空值可以出现在某列中一次
8、。中一次。第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性NOT NULL(非空)约束(非空)约束非空约束用来强制数据的域完整性,它用于设定某列值不能为空。如果指定非空约束用来强制数据的域完整性,它用于设定某列值不能为空。如果指定某列不能为空,则在进行插入记录时,此列必须要插入数据。某列不能为空,则在进行插入记录时,此列必须要插入数据。CHECK(检查)约束(检查)约束检查约束用来强制数据的域完整性,它使用逻辑表达式来限制表中的列可以检查约束用来强制数据的域完整性,它使用逻辑表达式来限制表中的列可以接受哪些数据值。接受哪些数据值。DEFAULT(默认)
9、约束(默认)约束默认约束用来强制数据的域完整性,它为表中某列建立一个默认值,当用户默认约束用来强制数据的域完整性,它为表中某列建立一个默认值,当用户插入记录时,如果没有为该列提供输入值,则系统会自动将默认值赋给该列。插入记录时,如果没有为该列提供输入值,则系统会自动将默认值赋给该列。默认值可以是常量、内置函数或表达式。使用默认约束可以提高输入记录的默认值可以是常量、内置函数或表达式。使用默认约束可以提高输入记录的速度。速度。FOREIGN KEY(外健)约束(外健)约束外键是指一个表中的一列或列组合,它虽不是该表的主键,但却是另一个表外键是指一个表中的一列或列组合,它虽不是该表的主键,但却是另
10、一个表的主键。通过外键约束可以为相关联的两个表建立联系,实现数据的引用完的主键。通过外键约束可以为相关联的两个表建立联系,实现数据的引用完整性,维护两表之间数据的一致性关系。整性,维护两表之间数据的一致性关系。第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性 约束还可以分为列约束和表约束两类。当约束被定义于某个表的约束还可以分为列约束和表约束两类。当约束被定义于某个表的一列时称为列约束,定义于某个表的多列时称为表约束。当一个约束一列时称为列约束,定义于某个表的多列时称为表约束。当一个约束中必须包含一个以上的列时,必须使用表约束。中必须包含一个以上的列时
11、,必须使用表约束。约束的操作约束的操作(创建、修改、删除创建、修改、删除)注意:注意:1、什么约束可以实现需要的数据完整性:不同的约束提供了不同的、什么约束可以实现需要的数据完整性:不同的约束提供了不同的功能。功能。2、在什么时候实施约束最合适:、在什么时候实施约束最合适:SQL server允许推迟或者禁用某些允许推迟或者禁用某些已经定义的约束。已经定义的约束。第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性创建主建约束创建主建约束 1、使用企业管理器创建、使用企业管理器创建 1)打开企业管理器,展开控制台目录,依次展开服务器组、服务)打开企业管理器
12、,展开控制台目录,依次展开服务器组、服务 器、数据库节点,选择表对象,在右边详细窗格中选择要创建器、数据库节点,选择表对象,在右边详细窗格中选择要创建 约束的表,启动表设计器。约束的表,启动表设计器。2)在表设计器中,选择需要设为主键的字段,如果需要选择多个)在表设计器中,选择需要设为主键的字段,如果需要选择多个 字段时,可以按住字段时,可以按住Ctrl键,同时用鼠标单击每个要选择的字段。键,同时用鼠标单击每个要选择的字段。3)选好字段后,右击选择的某个字段,从弹出的快捷菜单中选择)选好字段后,右击选择的某个字段,从弹出的快捷菜单中选择“设置主键设置主键”命令命令 4)执行命令后,在作为主键的
13、字段前有一个钥匙样图标。也可以)执行命令后,在作为主键的字段前有一个钥匙样图标。也可以 在选择好字段后,单击工具栏中的在选择好字段后,单击工具栏中的“钥匙钥匙”工具按钮,设置主工具按钮,设置主键键 5)设置主键完成。)设置主键完成。第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性创建主建约束创建主建约束 2、使用查询分析器创建主键、使用查询分析器创建主键 语法:语法:CREATE TABLE TABLE_NAME (CLOUMN_NAME DATATYPE CONSTRAINT CONSTRAINT_NAME PRIMARY KEY ,N ,CONST
14、RAINT CONSTRAINT_NAME PRIMARY KEY(COLUMN_NAEM,N)定义列级主键约束定义列级主键约束定义表级主键约束定义表级主键约束第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性例:例:CREATE TABLE S_B (学号学号 CHAR(5),书号书号 CHAR(5),借阅时间借阅时间 DATATIME,归还时间归还时间 DATATIME,CONSTRAINT P_Y PRIMARY KEY (学号,书号学号,书号)此例题就是建立了一个表级主键。此例题就是建立了一个表级主键。在在student库中,建立一个民族表(民族
15、代码,民族名称),将民族代码指定为主键。库中,建立一个民族表(民族代码,民族名称),将民族代码指定为主键。CREATE TABLE 民族民族 (民族代码民族代码 char(2)CONSTRAINT pk_mzdm PRIMARY KEY,民族名称民族名称 varchar(30)NOT NULL )GO此例题就是建立了一个列级主键此例题就是建立了一个列级主键第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性在已经存在的表中创建主键约束:在已经存在的表中创建主键约束:语法:语法:ALTER TABLE table_name ADD CONSTRAINT co
16、nstraint_name PRIMARY KEY CLUSTERED|NONCLUSTERED (column,n)其中:其中:constraint_name:指主键约束名称。:指主键约束名称。CLUSTERED:表示在该列上建立聚集索引。:表示在该列上建立聚集索引。NONCLUSTERED:表示在该列上建立非聚集索引。:表示在该列上建立非聚集索引。第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性例:例:在在student库中的课程注册表中,指定字段注册号为表的库中的课程注册表中,指定字段注册号为表的主键,其程序清单如下:主键,其程序清单如下:USE
17、 Student GO ALTER TABLE 课程注册课程注册 ADD CONSTRAINT pk_zce PRIMARY KEY CLUSTERED(注册号注册号)GO 第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性删除主键约束删除主键约束 语法:语法:ALTER TABLE table_name DROP CONSTRAINT PRIMARYKEY_NAME 例:例:ALTER TABLE S_B DROP CONSTRAINT P_Y 浏览指定表中的主键信息:浏览指定表中的主键信息:SP_PKEYS table_name第六章第六章 实现数据
18、完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性UNIQUE约束约束 UNIQUE约束主要是用来确保不受约束主要是用来确保不受 主键约束的列上的数据的惟一性。主键约束的列上的数据的惟一性。主键与主键与UNIQUE约束的区别主要为:约束的区别主要为:1、UNIQUE约束,主要用在非主键的一列或多列上要求数据惟一的约束,主要用在非主键的一列或多列上要求数据惟一的情况。情况。2、UNIQUE约束,允许该列上存在约束,允许该列上存在NULL值,而主键值,而主键 决不允许出现决不允许出现这种情况。这种情况。3、可以在一个表上设置多个、可以在一个表上设置多个UNIQUE约束,而在一个表
19、中只能设置约束,而在一个表中只能设置一个主键约束。一个主键约束。第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性创建创建UNIQUE约束约束 语法:语法:CREATE TABLE TABLE_NAME (CLOUMN_NAME DATATYPE CONSTRAINT UNIQUE _NAME UNIQUE ,N ,CONSTRAINT UNIQUE _NAME UNIQUE(COLUMN_NAEM,N)定义列级定义列级UNIQUE约束约束定义表级定义表级UNIQUE约束约束第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现
20、数据完整性创建创建UNIQUE约束约束 例:创建一个表级的例:创建一个表级的UNIQUE约束约束 CREATE TABLE test (编号编号 int CONSTRAINT PRIMARY KEY,名称名称 char(20),类型类型 char(20),时间时间 datetime,CONSTRAINT uniq_event UNIQUE (类型类型,时间时间)GO第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性添加添加UNIQUE约束约束为存在的表创建惟一约束,其语法格式如下:为存在的表创建惟一约束,其语法格式如下:ALTER TABLE table
21、_name ADD CONSTRAINT unique_name UNIQUE CLUSTERED|NONCLUSTERED (column,n)例:在例:在student库中,为库中,为“民族民族”表中的表中的“民族名称民族名称”字段创建一个惟字段创建一个惟一约一约 束。其程序清单如下:束。其程序清单如下:ALTER TABLE 民族民族 ADD CONSTRAINT uk_mzmz UNIQUE NONCLUSTERED(民族名称民族名称)GO 第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性删除删除UNIQUE约束约束为存在惟一约束的表中删除惟一
22、约束,其语法格式如下:为存在惟一约束的表中删除惟一约束,其语法格式如下:ALTER TABLE table_name DROP CONSTRAINT unique_name 例:在例:在student库中,为库中,为“民族民族”表中的表中的“民族名称民族名称”字段删除惟一约字段删除惟一约 束。其程序清单如下:束。其程序清单如下:ALTER TABLE 民族民族 DROP CONSTRAINT uk_mzmz GO 第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性CHECK约束约束CHECK(核查)约束通过检查输入表列的数据的值来维护值域的完(核查)约束
23、通过检查输入表列的数据的值来维护值域的完整性。核查约束通过对一个逻辑表达式的结果进行判断来对数据进行整性。核查约束通过对一个逻辑表达式的结果进行判断来对数据进行核查。核查。注意:注意:可以在一列上设置多个核查约束,也可以将一个核查约束应用可以在一列上设置多个核查约束,也可以将一个核查约束应用 于多列。当一列受多个核查约束控制时,所有的约束按照创建于多列。当一列受多个核查约束控制时,所有的约束按照创建 的顺序,依次进行数据有效性的核查。的顺序,依次进行数据有效性的核查。一般来说,可以在下面两种情况下,设置核查约束无效:一般来说,可以在下面两种情况下,设置核查约束无效:1、在执行、在执行INSER
24、T语句或语句或UPDATE语句过程:事先知道对数据的增语句过程:事先知道对数据的增 加或修改将违反核查约束的规定,但这些操作又是必须的。加或修改将违反核查约束的规定,但这些操作又是必须的。2、在复制进行时,在进行不同服务器间的复制操作的过程中,由于、在复制进行时,在进行不同服务器间的复制操作的过程中,由于 两个服务器之间设置的核查约束不一致,如果不事先两个服务器之间设置的核查约束不一致,如果不事先 使核查约束使核查约束 无效,则有可能使某些数据无法进行复制。无效,则有可能使某些数据无法进行复制。第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性创建创建C
25、HECK约束约束使用使用SQL语句为已存在的表创建检查约束,其语法格式如下:语句为已存在的表创建检查约束,其语法格式如下:ALTER TABLE table_name Column_name column_definition CHECK NOT FOR REPLICATION (check_criterial)|WITH CHECK|WITH NOCHECK ADD CONSTRAINT constraint_name CHECK (logical_expression),N 例:在例:在student库中,为学生表的出生日期列创建一个检查约束,以库中,为学生表的出生日期列创建一个检查约束,
26、以 保证输入的数据大于保证输入的数据大于1950年年1月月1日而小于当天的日期。日而小于当天的日期。ALTER TABLE 学生学生 ADD CONSTRAINT ck_csrq CHECK(出生日期出生日期01/01/1950 AND 出生日期出生日期GETDATE()GO添加新列的同时,添加核查约束添加新列的同时,添加核查约束在已经存在的列上添加核查约束在已经存在的列上添加核查约束第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性创建创建CHECK约束约束 例:创建一个有关销售记录的表,表中对例:创建一个有关销售记录的表,表中对SaleID设置了核查
27、约束,并规定设置了核查约束,并规定在进行复制过程中,使核查约束无效。在进行复制过程中,使核查约束无效。USE WEBDATA GO CREATE TEABLE Sales (SaleID int CHECK NOT FOR REPLICATION (SaleID=199999),SalesRegion char(2),CONSTRAINT ID_PK PRIMARY KEY (SaleID)GO第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性删除删除CHECK约束约束使用使用SQL语句将已存在核查约束删除,其语法格式如下:语句将已存在核查约束删除,其语
28、法格式如下:ALTER TABLE table_name DROP check_name 可以使用下面的语法使所有的约束或指定的约束无效:可以使用下面的语法使所有的约束或指定的约束无效:ALTER TABLE table_name CHECK|NOCHECK CONSTRAINT ALL|CONSTRAINT_NAME ,N 例:使例:使pubs数据库中数据库中authors表上的所有约束无效表上的所有约束无效 ALTER TABLE authors NOCHECK CONSTRAINT ALL GO 第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性创
29、建默认约束创建默认约束使用使用SQL语句为已存在的表创建默认约束,其语法格式如下:语句为已存在的表创建默认约束,其语法格式如下:ALTER TABLE table_name ADD CONSTRAINT constraint_name DEFAULT constant_expression FOR column_name其中:其中:table_name:需要建立默认约束的表名。:需要建立默认约束的表名。constraint_name:默认约束名称。:默认约束名称。constant_expression:默认值。:默认值。例:在例:在STUDENT数据库的数据库的“教师教师”表上,为表上,为“学
30、历学历”字段创建一个字段创建一个默认约束,其默认值为默认约束,其默认值为本科本科。其程序清单如下:。其程序清单如下:ALTER TABLE 教师教师 ADD CONSTRAINT df_xueli DEFAULT 本科本科 FOR 学历学历 GO 第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性外键约束外键约束 1、外键主要用来维护两个表之间的一致性关系。外键的建立主要是、外键主要用来维护两个表之间的一致性关系。外键的建立主要是通过将一个表中的主键所在列包含在另一个表中,这些列就是另一个通过将一个表中的主键所在列包含在另一个表中,这些列就是另一个表的外
31、键。表的外键。2、外键约束不仅可以与另一张表上的主键约束建立联系,也可以与、外键约束不仅可以与另一张表上的主键约束建立联系,也可以与另一张表上的另一张表上的UNIQUE约束建立联系。约束建立联系。3、外键约束上允许存在为、外键约束上允许存在为NULL的值,则针对该列的外键约束核查的值,则针对该列的外键约束核查将被忽略。将被忽略。4、外键同时也限制了对主键所在表的数据进行修改。当主键所在的、外键同时也限制了对主键所在表的数据进行修改。当主键所在的表的数据被另一张表的外键所引用时,用户将无法对主键里的数据进表的数据被另一张表的外键所引用时,用户将无法对主键里的数据进行修改或删除。除非事先删除或修改
32、引用的数据。行修改或删除。除非事先删除或修改引用的数据。5、当一个新的数据加入到表格中,或对表格中已经存在的外键上的、当一个新的数据加入到表格中,或对表格中已经存在的外键上的数据进行修改时,新的数据必须存在于另一张表的主键上。数据进行修改时,新的数据必须存在于另一张表的主键上。第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性创建外键约束创建外键约束 语法语法:CREATE TABLE table_name (column_name column_definition CONSTRAINT constraint_name FOREIGN KEY REFE
33、RENCES ref_table(ref_column)ON DELETE CASCADE|NO ACTION ON UPDATE CASCADE|NO ACTION NOT FOR REPLICATION ,N CONSTRAINT foreignkey_name FOREIGN KEY (column,n)REFERENCES ref_table(ref_column)NOT FOR REPLICATION ,N )ON DELETE CASCADE|NO ACTION 表示在删除与外键相对应的表示在删除与外键相对应的主键所在的行时,级联删除主键所在的行时,级联删除(cascade)外键所
34、在的行的数外键所在的行的数据或者不做任何操作据或者不做任何操作(no action)ON update CASCADE|NO ACTION 表示在删除与外键相对应的表示在删除与外键相对应的主键所在的行时,级联修改主键所在的行时,级联修改(cascade)外键所在的行的数外键所在的行的数据或者不做任何操作据或者不做任何操作(no action)第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性创建外键约束创建外键约束 create table test1 (pub_id varchar(20)primary key,pub_name varchar(50)
35、,address varchar(20),city varchar(10),state char(2),country char(10)go create table test2(author_id varchar(20)primary key,author_name varchar(50),phone varchar(20),zipcode char(10)创建外键约束创建外键约束create table test3(title_id int primary key title_name varchar(50),author_id varchar(20)constraint for_auid
36、 foreign key references test2(author_id)on delete cascade not for replication,pub_id varchar(20)constraint for_pubid foreign key references test1(pub_id)not for replication,)第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据完整性使用约束实现数据完整性创建外键约束创建外键约束-在已经存在的表上创建外键约束在已经存在的表上创建外键约束 语法语法:ALTER TABLE table_name ADD CONSTRA
37、INT constraint_name FOREIGN KEY (column_name,)REFERENCES ref_table (ref_column_name,)例:在例:在student库的班级表上,为专业代码字段创建一个外键约束,从而保证库的班级表上,为专业代码字段创建一个外键约束,从而保证 输入有效的专业代码。其程序清单如下:输入有效的专业代码。其程序清单如下:ALTER TABLE 班级班级 ADD CONSTRAINT fk_zydm FOREIGN KEY(专业代码专业代码)REFERENCES 专业专业(专业代码专业代码)GO 第六章第六章 实现数据完整性实现数据完整性v
38、 使用约束实现数据完整性使用约束实现数据完整性删除外键约束删除外键约束语法语法:ALTER TABLE table_name DROP CONSTRAINT FOREIGNKEY_PUBID GO例:例:ALTER TABLE test3 DROP CONSTRAINT for_pubid GO ALTER TABLE test3 WITH CHECK ADD CONSTRAINT for_pubid FOREIGN KEY (pub_id)REFERENCES test2(pub_id)NOT FOR REPLICATION GO第六章第六章 实现数据完整性实现数据完整性v 使用约束实现数据
39、完整性使用约束实现数据完整性查看约束的相关属性查看约束的相关属性1、使用企业管理器查看约束信息、使用企业管理器查看约束信息(1)在企业管理器中,选择要查看约束的表(如:学生表),打开表设计器。)在企业管理器中,选择要查看约束的表(如:学生表),打开表设计器。(2)在表设计器中可以查看主键约束、空值约束和默认值约束。)在表设计器中可以查看主键约束、空值约束和默认值约束。(3)在表设计器中,右击鼠标,从弹出的快捷菜单中选择)在表设计器中,右击鼠标,从弹出的快捷菜单中选择“属性属性”命令。弹出命令。弹出“属性属性”对话框。对话框。(4)在)在“属性属性”对话框中通过切换选项卡,可以查看主键约束、外键
40、约束与对话框中通过切换选项卡,可以查看主键约束、外键约束与CHECK约束信息。约束信息。2、使用系统存储过程查看约束信息、使用系统存储过程查看约束信息 系统存储过程系统存储过程sp_help用来查看约束的名称、创建者、类型和创建时间,语法:用来查看约束的名称、创建者、类型和创建时间,语法:EXEC sp_help 约束名称约束名称 如果约束存在文本信息,可以使用如果约束存在文本信息,可以使用sp_helptext来查看,其语法格式为:来查看,其语法格式为:EXEC sp_helptext 约束名称约束名称 EXEC sp_pkeys table_name EXEC sp_fkeys table
41、_name 第六章第六章 实现数据完整性实现数据完整性v使用规则实现数据完整性使用规则实现数据完整性规则与规则与CHECK比较比较1、规规则则是是一一种种数数据据库库对对象象,它它的的作作用用与与CHECK约约束束相相同同,用用来来限限制输入值的取值范围,实现强制数据的域完整性。制输入值的取值范围,实现强制数据的域完整性。2、规规则则与与CHECK约约束束相相比比较较,CHECK约约束束比比规规则则更更简简明明,它它可可以以在在建建表表时时由由CREATE TABLE语语句句将将其其作作为为表表的的一一部部分分进进行行指指定定,而而规则需要单独创建,然后绑定到列上。规则需要单独创建,然后绑定到
42、列上。3、在在一一个个列列上上只只能能应应用用一一个个规规则则,但但是是却却可可以以应应用用多多个个CHECK约约束。束。4、一一个个规规则则只只需需定定义义一一次次就就可可以以被被多多次次应应用用,可可以以应应用用于于多多个个表表或或多个列,还可以应用到用户定义的数据类型上。而多个列,还可以应用到用户定义的数据类型上。而CHECK则不能。则不能。第六章第六章 实现数据完整性实现数据完整性v使用规则实现数据完整性使用规则实现数据完整性使用使用SQL语句管理规则语句管理规则(创建、绑定、解绑、删除创建、绑定、解绑、删除)1、创建规则、创建规则 规则是一种数据库对象,在使用之前需要被创建。规则是一
43、种数据库对象,在使用之前需要被创建。语法:语法:CREATE RULE rule_name AS condition_expression 其中:其中:rule_name 指规则对象的名称,其必须符合命名规则指规则对象的名称,其必须符合命名规则 condition_expression 条件表达式条件表达式 例:例:CREATE RULE xb_rule AS xb in(男男,女女)GO 第六章第六章 实现数据完整性实现数据完整性v使用规则实现数据完整性使用规则实现数据完整性使用使用SQL语句管理规则语句管理规则(创建、绑定、解绑、删除创建、绑定、解绑、删除)2、绑绑定定规规则则 创创建建好
44、好的的规规则则,必必须须绑绑定定到到列列或或用用户户定定义义的的数数据据类类型型上上才才能能够够起起作作用用。使使用用系系统统存存储储过过程程将将规规则则绑绑定定到到字字段段或或用用户户定定义义的的数数据类型上。据类型上。语法:语法:EXEC sp_bindrule 规则名称规则名称,表名表名.字段名字段名例:例:EXEC sp_bindrule xb_rule,教师教师.性别性别3、解解绑绑 如如果果某某个个字字段段不不再再需需要要规规则则对对其其输输入入的的数数据据进进行行限限制制,应应该该将规则从该字段上去掉,即解绑。将规则从该字段上去掉,即解绑。语法:语法:EXEC sp_unbind
45、rule 表名表名.字段名字段名4、删删除除规规则则 如如果果规规则则没没有有存存在在价价值值,可可以以将将其其删删除除。在在删删除除之之前前,应该对规则解绑,当规则不再应用与任何表时,可以删除。应该对规则解绑,当规则不再应用与任何表时,可以删除。语法:语法:DROP RULE 规则名称规则名称,n第六章第六章 实现数据完整性实现数据完整性v使用默认值实现数据完整性使用默认值实现数据完整性 默默认认(也也称称默默认认值值)是是一一种种数数据据库库对对象象,它它与与DEFAULT(默默认认)约约束束的的作作用用相相同同,也也是是当当向向表表中中输输入入记记录录时时,没没有有为为某某列列提提供供输
46、输入入值值,如如果果该该列列被被绑绑定定了了默默认认对对象象,系系统统会会自自动动将将其其值值赋赋给给该列。该列。与与DEFAULT约约束束不不同同的的是是默默认认对对象象的的定定义义独独立立于于表表,其其定定义义一一次次就就可可以以被被多多次次应应用用于于任任意意表表中中的的一一列列或或多多列列,也也可可以以应应用用于于用户定义的数据类型。用户定义的数据类型。默默认认对对象象的的使使用用方方法法同同规规则则相相似似,包包含含默默认认的的创创建建、绑绑定定、解解绑绑和和删删除除。这这些些操操作作既既可可以以在在查查询询分分析析器器中中完完成成,也也可可以以在在企企业业管理器中完成。管理器中完成
47、。第六章第六章 实现数据完整性实现数据完整性v使用默认值实现数据完整性使用默认值实现数据完整性1、创建默认值、创建默认值在查询分析器中,创建默认对象的语法格式如下:在查询分析器中,创建默认对象的语法格式如下:CREATE DEFAULT default_name AS default_description其中:其中:default_name:指默认值名称,其必须符合:指默认值名称,其必须符合SQL Server的标识符命名的标识符命名规则。规则。default_description:常量表达式,可以包含常量、内置函数或数学表:常量表达式,可以包含常量、内置函数或数学表达式。达式。2、绑定默
48、认值、绑定默认值默认对象建立以后,必须将其绑定到表字段或用户定义的数据类型上默认对象建立以后,必须将其绑定到表字段或用户定义的数据类型上才能起作用。在查询分析器中使用系统存储过程来完成绑定,其语法才能起作用。在查询分析器中使用系统存储过程来完成绑定,其语法格式为:格式为:EXECUTE sp_bindefault 默认名称默认名称,表名表名.字段名字段名第六章第六章 实现数据完整性实现数据完整性v使用默认值实现数据完整性使用默认值实现数据完整性例:创建一个例:创建一个df_xuefen 默认,将其绑定到默认,将其绑定到“教学计划教学计划”表的表的“学分学分”字段,使其默认学分为字段,使其默认学
49、分为4,其程序清单如下:,其程序清单如下:USE STUDENT GO CREATE DEFAULT def_xuefen AS 4 GO EXEC sp_bindefault def_xuefen,教学计划教学计划.学分学分 GO第六章第六章 实现数据完整性实现数据完整性v使用默认值实现数据完整性使用默认值实现数据完整性3、解绑默认值、解绑默认值对于表中的字段,如果认为其默认值没有存在的必要时,可以使用系对于表中的字段,如果认为其默认值没有存在的必要时,可以使用系统存储过程统存储过程sp_unbindefault解除其绑定的默认值,其语法格式为:解除其绑定的默认值,其语法格式为:EXECUT
50、E sp_unbindefault 表名表名.字段名字段名4、删除默认值、删除默认值当默认值不再有用时,可以将其删除。删除默认值之前,必须将其从当默认值不再有用时,可以将其删除。删除默认值之前,必须将其从表中解绑。在查询分析器中使用表中解绑。在查询分析器中使用DROP语句删除默认值,语法如下:语句删除默认值,语法如下:DROP DEFAULT default_name,n例:从例:从STUDENT数据库中删除数据库中删除def_xuefen默认值,其程序清单如下:默认值,其程序清单如下:USE STUDENT GO EXEC sp_unbindefault 教学计划教学计划.学分学分 GO D