文档详情

数据库Oracle第四章2.ppt

发布:2017-04-23约4.04千字共33页下载文档
文本预览下载声明
数据库应用技术 第四章 数据库对象 与数据库设计;4.2 约束;4.2.1 约束的作用与分类;ORACLE支持5种类型的完整性约束 NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK;4.2.2 定义与维护约束;UNIQUE 唯一性约束要求表中任意两行在该字段上的值都不相同,但可以为空。 字段级:[CONSTRAINT 约束名] UNIQUE 可在多个字段上建立一个唯一性约束,表约束: CONSTRAINT 约束名 UNIQUE (字段名列表) 系统自动建立唯一索引;删除有外键指向的唯一性约束前应:禁用或删除外键。 删除或禁用唯一性约束时:通常同时删除关联的唯一索引,这会降低数据库性能。经常删除或禁用唯一性约束可能导致因丢失索引而带来的性能降低和错误。如何避免? 1、在唯一性约束保护的数据列上创建非唯一性索引。 2、添加唯一性约束。;PRIMARY KEY 主键约束在表上是唯一的,相当于非空的唯一性约束。可以同时在一个或多个字段上建立。 字段级:[CONSTRAINT 约束名] PRIMARY KEY 表级:[CONSTRAINT 约束名] PRIMARY KEY (字段名列表) 用于表联接。如:学生证号。 唯一性约束和主键约束不会对完全为NULL的键进行处理。 ;FOREIGN KEY 外键约束作用在父表和子表上 父表上的主键或唯一键 子表外键的值必须:父表字段或者空 在单一字段上建立外键,字段级约束 [CONSTRAINT 外键名] REFERENCES 父表名(字段名) 在多个字段上建立外键,表级约束 [CONSTRAINT 外键名] FOREIGN KEY (字段列表) REFERENCES 父表名(字段列表) [ON DELETE SET NULL] ON DELETE子句:声明父表记录被删除后,对子表记录的处理。缺省情况下禁止在子表记录还存在的情况下删除父表的记录。;使用外键时应该考虑的因素: 外键约束提供了字段参照完整性 外键从句中的字段数目和每个字段指定的数据类型必须和REFERENCES从句中的字段相匹配。 外键不能自动创建,需要用户手动创建。 必须有外键约束参照表的SELECT权限或REFERENCES权限。 一个表中最多可以有31个外键约束。 在临时表中不能使用外键约束。;CHECK 检查约束检查一行记录是否满足条件。 [CONSTRAINT 约束名] CHECK(条件表达式) 列级检查约束只能与限制的字段有关,一个 表级检查约束只能与限制的表中字段有关,多个 检查约束中不能包含子查询 如:工资+奖金5000,甲的工资+乙的工资2000。 ;约束名是可选的,如果没提供Oracle将产生一个以SYS_开始的唯一的名字。;举例 CREATE TABLE agents( aid CHAR(3) NOT NULL, lid CHAR(3) NULL, salary NUMBER(4,0) PRIMARY KEY(aid), FOREIGN KEY(lid) REFERNCE locations(lid), CHECK(salary0 AND UPPER(aid)=aid) ); ;约束存在于数据字典中,在执行SQL或PL/SQL期间使用。 增加约束 NOT NULL使用ALTER的MODIFY子句,其它的使用ALTER的 ADD子句。 CREATE TABLE t(name VARCHAR2(20)); ALTER TABLE t MODIFY name NOT NULL; ALTER TABLE t ADD CONSTRAINT t_uk_1 UNIQUE(name); ALTER TABLE t ADD CONSTRAINT t_pk PRIMARY KEY(name); ALTER TABLE t ADD id VARCHAR2(20) CONSTRAINT t_fk_1 ??????? REFERENCES tf(id); ;修改约束名 ALTER TABLE 表名 RENAME CONSTRAINT TO 约束名; 删除约束 ALTER TABLE 表名 DROP CONSTRAINT 约束名; 禁止约束 ALTER TABLE 表名 DISABLE CONSTRAINT 约束名 [CASCADE]; 启用约束 ALTER TABLE 表名 ENABLE CONSTRAINT 约束名; ;4.2.3 约束的建立原则;4、在需求分析阶段就必须制定完整性约束的命名规范,尽量使用有意义的英文单词、缩写词、表名、列名及下划线等组合,使其易于识别和记忆。如果使用CASE工具,一般有缺省的规则
显示全部
相似文档