5、约束、同义词、缺省值、自定义数据类型、规则

上传人:艾力 文档编号:54221872 上传时间:2018-09-09 格式:PPT 页数:36 大小:241.50KB
返回 下载 相关 举报
5、约束、同义词、缺省值、自定义数据类型、规则_第1页
第1页 / 共36页
5、约束、同义词、缺省值、自定义数据类型、规则_第2页
第2页 / 共36页
5、约束、同义词、缺省值、自定义数据类型、规则_第3页
第3页 / 共36页
5、约束、同义词、缺省值、自定义数据类型、规则_第4页
第4页 / 共36页
5、约束、同义词、缺省值、自定义数据类型、规则_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《5、约束、同义词、缺省值、自定义数据类型、规则》由会员分享,可在线阅读,更多相关《5、约束、同义词、缺省值、自定义数据类型、规则(36页珍藏版)》请在金锄头文库上搜索。

1、约束、同义词、缺省值、自定义数据类型、规则,学习目标,掌握数据完整性 掌握DEFAULT、CHECK、主键、外键和唯一约束的创建方法 了解默认值对象与默认值约束的区别 了解自定义数据类型的使用 了解规则与CHECK约束的区别 掌握同义词,一、数据库完整性,如何保证存入数据库的数据都是正确的,那么就需要用数据完整性来实现了。 例如: 如果输入了 employee_id 值为 123 的职员,那么该数据库不应允许其他职员使用同一 ID 值。 如果计划将 employee_birthdate 列的值范围设定为从不能大于20090406,则数据库不应接受 大于这个日期的值。 如果表有一 dept_id

2、 列,该列存储职员的部门编号,则数据库应只允许接受公司中的有效部门编号。 共分为:实体完整性、域完整性、引用完整性和用户自定义完整性,1.1、实体完整性,实体完整性简单的说,就是将表中的每一行看作一个实体。 实体完整性要求表的标示符列或主键的完整性。可以通过建立唯一索引、PRIMARY KEY约束、UNIQUE约束,以及列的IDENTITY属性来实施实体完整性,1.2、域完整性,域完整性是指给定列的输入有效性。 域完整性通过 FOREIGN KEY 约束、CHECK 约束、DEFAULT 定义、NOT NULL 定义和规则来实现,1.3、引用完整性,引用完整性又称参照完整性。 引用完整性维持被

3、参照表和参照表之间的数据一致性,他通过主键(PRIMARY KEY)约束和外键(FOREIGN KEY)约束来实现。,例如,对于 pubs 数据库中的 sales 和 titles 表,引用完整性基于 sales 表中的外键 (title_id) 与 titles 表中的主键 (title_id) 之间的关系。 如下图:,1.4、用户自定义完整性,用户定义完整性使您得以定义不属于其它任何完整性分类的特定业务规则。 比如:一个公司里面只能有10个员工 用户自定义完整性要靠触发器来实现。,二、约束,约束通过限制列中数据、行中数据和表之间的数据,确保将有效数据添加到列中,并维护表与表之间的特定关系,

4、约束是保证数据完整性的有效手段之一。 约束包括:DEFAULT约束、CHECK约束、主键约束、外键约束和唯一约束,2.1 DEFAULT约束,使用DEFAULT约束,如果用户在插入新行是没有显示为列提供数据,系统会将默认支赋给该列。 例如,在一个表的某一个列中,可以让数据库服务器在用户没有输入时填上”?”或者”fill in later”。 默认值约束的定义格式为: CONSREAINT constraint_name DEFAULT constant_expression 使用默认值约束需要注意如下几点: DEFAULT约束只能应用于INSERT语句,且定义的值必须与该列的数据类型和精度一致

5、 每一列只能有一个DEFAULT约束,因为如果有多个的话,系统将无法确定在该列上使用哪一个约束。 DEFAULT约束不能定义在指定IDENTITY属性或数据类型为TIMESTAMP的列上,因为对于这些列,系统会自动提供数据。 DEFAULT约束值允许使用一些系统函数提供的值,如GETDATE()。 使用DEFAULT约束实现域完整性。,在Management Studio中创建DEFAULT约束,2.2 CHECK约束,CHECK约束的主要作用是限制输入到一列或多列中的可能值,从而保证SQL Server数据库中数据的域完整性。 比如,定义sex列只能输入男,女。 再比如: 新加入一列ZIP_

6、CODE及其相应的CHECK约束: ALTER Table TB_CHECK_CONSTRAINT ADD ZIP_CODE char(6) null CONSTRAINT CH_ZIP_CODE check (ZIP_CODE like 0-9 0-9 0-9 0-9 0-9 0-9) 通过ALTER Table TB_CHECK_CONSTRAINT NOCHECK CONSTRAINT CH_ZIP_CODE关闭约束。,在Management Studio中创建CHECK约束,2.3 主键约束,在数据库的每个表中,经常有通过一列或者多个列,唯一的标识表中的每一行。就好像我们平时使用的身份

7、证,能够唯一的标识每个人一样。这样的一列或者多个列,被称为主键,通过主键,可以强制表的实体完整性。 如果在PRIMARY KEY约束中未指定索引类型时,默认情况下所建立的索引为聚合索引。该索引只能通过删除PRIMARY KEY约束或其相关表的方法来删除,而不能使用DROP INDEX语句删除。当PRIMARY KEY约束由另一张表的FOREIGN KEY约束引用时,不能删除PRIMARY KEY约束;要删除它,必须先删除FOREIGN KEY约束。,2.4 外键约束,FOREIGN KEY 约束标识表之间的关系。 一个表的外键指向另一个表的主键。比如:可以对emp表中的deptno列建立外键。

8、使用外键约束实现相对完整性(引用完整性),FOREIGN KEY(FK) 操作说明如果一个外键值没有候选键,则不能插入带该值(NULL 除外)的行(插入限制)。如果尝试删除现有外键指向的行,ON DELETE 子句将控制所采取的操作。ON DELETE 子句有两个选项: NO ACTION 指定删除因错误而失败。 CASCADE 指定还将删除包含指向已删除行的外键的所有行。 如果尝试更新现有外键指向的候选键值,ON UPDATE 子句将定义所采取的操作。它也支持 NO ACTION 和 CASCADE 选项。,在Management Studio中创建外键约束,2.5 UNIQUE约束,UNI

9、QUE约束在列集内强制执行值的唯一性。 对于 UNIQUE 约束中的列,表中不允许有两行包含相同的非空值。 主键也强制执行唯一性,但主键不允许空值。 语法如: alter table temp add constraint un unique(name) -un是该约束的名字 Unique需要一个非聚集唯一索引来增强,在Management Studio中创建唯一约束,在Management Studio中创建唯一约束,注意:这里要选择唯一键,与索引是不同的概念。,三、 DEFAULT对象与绑定,使用CREATE DEFAULT phonedflt AS getdate()创建一个DEFAUL

10、T对象,注意,不同于DEFAULT约束。 创建的缺省值对象通过绑定存储过程来实现与列的绑定,如下: sp_bindefault phonedflt, temp.temp_date 删除缺省值之前要先取消绑定,如: sp_unbindefault temp.temp_date drop default phonedflt,四、自定义类型,采用系统存储过程 sp_addtype 实现定义自定义类型,语法如下: sp_addtype type,system_data_bype,null_type type:是用户定义的数据类型的名称。system_data_type: 是系统提供的数据类型,例如 D

11、ecimal、Int、Char 等等。null_type:表示该数据类型是如何处理空值的,必须使用单引号引起来,例如NULL、NOT NULL或者NONULL。 例子: Exec sp_addtype ssn,Varchar(11),Not Null 创建一个用户定义的数据类型 ssn,其基于的系统数据类型是变长为11 的字符,不允许空。 采用sp_droptype type删除自定义数据类型,五、规则与自定义类型的使用,规则是一个向后兼容的功能,用于执行一些与 CHECK 约束相同的功能。CHECK 约束是用来限制列值的首选标准方法。CHECK 约束比规则更简明,一个列只能应用一个规则,但是

12、却可以应用多个 CHECK 约束。CHECK 约束作为 CREATE TABLE 语句的一部分进行指定,而规则以单独的对象创建,然后绑定到列上。也可以把规则绑定到用户自定义数据类型上。,创建规则并把规则绑定到表的某一列上 if exists(select name from sysobjectswhere name=rule1and type=r)drop rule rule1 Go create rule rule1 as v150 and v200-使用规则,绑定到表的列上 sp_bindrule rule1 ,stu.b_id -插入一条记录 select * from stu inse

13、rt into stu values (1141,sad,169,169) -更新记录 update stu set b_id=13 -解除对表的绑定 sp_unbindrule stu.b_id,注意:把规则绑定到表的某列上时,只是从创建规则起开始执行该规则,进行对该表的这个字段进行规则约束。对于表里以前存在的数据而言不进行规则的约束!,创建规则把规则绑定到用户自定义数据类型上 -首先定义一个数据类型 exec sp_addtype mail ,varchar(60),not null -创建一个规则 if exists(select name from sysobjectswhere na

14、me=rule2and type=r)drop rule rule2 go create rule rule2 as value like % -绑定规则到用户自定义数据类型上 sp_bindrule rule2,mail,-创建一张表 create table message (m_id int identity(1,1) primary key,m_name char(16) not null,m_mail mail ) -给表插入一条数据 insert into message values(aa,) -查看刚写的信息 select * from message -如果插入不符合规则的数

15、据,则插入失败 insert into message values(aa,),六、同义词,在SQLServer中引用数据库对象时要提供该对象的服务器名称、数据库名称、架构名称(与用户同名)和对象名称,如果该对象所在的服务器名称或所在数据库名称发生改变,则引用该对象的所有应用程序也必须进行相应更改,为了避免这种情况,SQLServer2005引入了同义词的概念。,在Management Studio中创建同义词,在Management Studio中创建同义词,这样使用 Select * from aa;与 Select * from abc; 效果相同。,课程小结,数据完整性一直是数据库一个

16、非常重要并且难以理解的话题,实现数据完整性通过约束、规则以及触发器来实现,本课主要讲述使用约束、规则实现数据完整性 使用触发器实现完整性是我们后面的一个话题,独立实践,填空题 1 SQL Server2005 提供了 5 种类型的约束,分别是 、 、 、 和 用于确保不同类型的数据完整性。 2 定义为主键的列的值必须是唯一的,且不允许出现_值。 3 如果一个数据表己经设置了主键约束,但该表还包含其他每行具有唯一值的列,为避免该列中的值 现重复输入的情况,可以使用 约束 4 在 SQLServer2005 中引用数据库对象,需要提供该对象的 、数据库名称、 和 。,选择题 1 下列约束中,可用来实现数据表之间依赖关系的是( )。 A 主键约束 B。 CHECK 约束 。DEFAULTLT 约束 D。 主键约束和外键约束 2 下列说法中正确的是( )。 A DEFAULT约束可随 INSERT 命令向数据表中插入没有指定值的列的默认值,一个列通常可以拥一个或多个 DEFAULT 约束。 B 只能指定一个列为主键,且该列值必须唯一。 。 同义词可用于为本地或远程服务器上的另一个数据库对象(称为“基对象”)提供备选名称,或提应一个提取层,该层可防止客户端应用程序的基对象的名称或位置被更改 D 字符串函数可用于处理数字运算和浮点数运算。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号