网站大量收购独家精品文档,联系QQ:2885784924

第3章_SQL高级应用.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章_SQL高级应用

SQL 的高级应用 3.1 SQL 中的完整性约束 SQL把各种完整性约束作为数据库模式定义的一部分。既有效防止了对数据库的意外破坏,提高了完整性检测的效率,又可以减轻编程人员的负担。 SQL对三种不同完整性约束的设置及检测,采取了不同的方式加以实现。下面分别介绍。 3.1.1 实体完整性和主码 前面1.2.4节中已讲过,实体完整性规定,主码的任何属性都不能为空,因为,概念模型中实体和联系都是可区分的,而且它们以码为唯一性标识。如果,主码的属性值可以为空,则意味着在概念模型中存在着不以码为唯一性标识的实体。这显然是前后矛盾的。 那么怎样保证实体完整性呢?SQL中实体完整性是通过主码来实现的。一旦某个属性或属性组被定义为主码,该主码的每个属性就不能为空值,并且在关系中不能出现主码值完全相同的两个元组。 主码的定义是在Create Table 语句中使用 Primary Key关键字来实现的。方法有两种: 在属性定义后加上关键字 Primary Key; 在属性表定义后加上额外的定义主码的子句:Primary Key(主码属性名表) (例如P42例3.1) 说明: 如果主码仅由一个属性组成,上述两种方法都可定义,若由两个或以上的属性组成,则只能用上述第二种方法定义了。 对于候选码的说明方法,可以用Unique说明该属性的值不能重复出现。Unique的使用与Primary Key相似。 一个表中只能有一个主码定义,但可以有多个Unique说明。 SQL中,并没有强制为每个关系指定主码,但为每个关系指定主码通常会更好一些。(因为主码的指定可以确保关系的实体完整性) 3.1.2 参照完整性约束与外部码 参照完整性是对关系间引用数据的一种限制。即:若属性组A是基本关系R1的外码,它与基本关系R2的主码K相对应,则R1中每个元组在A上的值必须:要么取空值,要么等于R2中某元组的主码值。 一、外部码约束的说明: SQL中就是利用外部码的说明来实现参照完整性约束,限制表中某些属性的取值的。外部码的说明也有两种方法: 1、在该属性的说明后直接加上关键字”REFERENCES 表名(属性名)”,其中表名称为参照关系名,属性名称为参照关系的主码。 2、在Create Table 语句的属性清单后,加上外部码说明子句,格式为: FOREIGN KEY 属性名表1 REFERENCES 表名(属性名表2) 上式中的属性名表1和属性名表2中属性可以多于一个,但必须前后对应。 (见P43下部 例3.3) 二、参照完整性约束的实现策略 前面讲了,外部码的取值只有两种情况:要么取空,要么取参照关系中的主码值。可是当用户操作违反了这个规则时,如何保持此约束呢? SQL提供了三种可选方案: 1、RESTRICT(限制策略): 当用户对表进行违反了上述完整性约束、条件的插入、删除或修改操作时,将会被系统拒绝。 2、CASCADE(级联策略): 当对参照关系进行删除和修改时,SQL所提供的一种方案。在这种策略下,当删除或修改参照关系中某元组的主码值时,被参照关系中,那些外部码具有该值的元组也将被删除或修改,以保证参照完整性。 3、SET NULL(置空策略): 置空策略也是针对参照关系的删除或修改操作的。在这种策略下,当删除参照关系中的某一元组或修改某一元组的主码值时,被参照关系中外码值等于该主码值的元组在该外码上的值将被置空 说明: 当用户不指定参照完整性的实现策略时,一般被默认为RESTRICT(限制策略)。实现策略的说明通常被加在外部码的说明后面,格式为:ON DELETE SET NULL ON UPDATE CASCADE。 3.1.3 用户自定义完整性约束 对于用户自定义完整性约束,SQL提供了非空约束、对属性的CHECK约束、对元组的CHECK约束、触发器等来实现用户的各种完整性要求。 1、非空约束: 在CRETE TABLE 中的属性定义后面加上NOT NULL关键字即定义了该属性不能取空值。 2、基于属性的CHECK约束 使用CHECK(检查)子句可保证属性值满足某些前提条件。其一般格式为: CHECK(条件) 它既可跟在属性定义的后面,也可在定义语句中另增一子句加以说明。 如:CHECK(age=18 AND age=65); CHECK(sex IN (“男”,”女”)); CHECK(dno IN(select dno from department)); 从上例中可以看出,CHECK子句的条件中还可以带子查询。 3、基于元组的CHECK约束 如P46 例3.6工资表salary 的定义中的CHECK(Insure+FundBasepay); 基于元组的CHECK约束往往要涉及到表中的多个域。所以它是元组约束。在对整个

文档评论(0)

qnc814 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档