资源描述:
《Oracle维护数据完整性.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、维护数据完整性目标完成这一课的学习后,您应该能达到下列目标:实施数据完整性约束维护完整性约束从数据字典获取约束信息数据完整性应用程序代码表数据完整性约束数据库触发器约束的类型约束NOTNULLUNIQUEPRIMARYKEYFOREIGNKEYCHECK说明指示出列不能包含空值指示一个列或列的组合是唯一的指示一个列或列的组合作为表的主键指示一个列或列的组合在引用完整性约束中作为外键指定表中的每一行必须满足的条件约束的状态ENABLENOVALIDATE现有数据新数据DISABLENOVALIDATEDISABLEVA
2、LIDATE==ENABLEVALIDATE约束的状态转换规则除非指定NOVALIDATE,否则ENABLE表示VALIDATE。除非指定VALIDATE,否则DISABLE表示NOVALIDATE。VALIDATE和NOVALIDATE没有缺省的ENABLE和DISABLE状态。当唯一键或主键从DISABLE状态转为ENABLE状态且没有现有索引时,将自动创建唯一索引。(如果索引可延迟,则将存在异常。)与此类似,当唯一键或主键从ENABLE转为DISABLE且是使用唯一索引启用时,则删除该唯一索引。当任何约束从NOVAL
3、IDATE状态转为VALIDATE状态时,必须检查所有的数据。但是,从VALIDATE转为NOVALIDATE时,将忽略数据已经过检查这一事实。将单个约束从ENABLENOVALIDATE状态转为ENABLEVALIDATE状态时,并不禁止使用读取、写入或其它DDL语句。约束检查DML语句检查不可延迟的约束COMMIT检查可延迟的约束查看约束信息SELECTCONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME,STATUS,DEFERRABLE,DEFERRED,VALIDATEDFROM
4、USER_CONSTRAINTS;将约束定义为立即或延迟使用SETCONSTRAINTS:SETCONSTRAINT
5、CONSTRAINTS{constraint
6、ALL}{IMMEDIATE
7、DEFERRED}ALTERSESSION语句还包含将约束设置为DEFERRED或IMMEDIATE的子句SETCONSTRAINTS。ALTERSESSIONSETCONSTRAINT[S]={IMMEDIATE
8、DEFERRED
9、DEFAULT}约束定义原则主约束和唯一性约束:将索引放在单独的表空间中。如果经常使用批量加载,请使用
10、非唯一索引。自引用外键:在初始加载后定义或启用外键。延迟约束检查。外键注意事项相应解决方法目标操作删除父表级联约束截断父表在子表上执行DML操作确保包含父键的表空间联机使用CASCADECONSTRAINTS子句删除包含父表的表空间禁用或删除外键约束的定义在创建表的时候定义在修改表的时候定义约束的结构columndatatype[CONSTRAINTconstraint]{[NOT]NULL
11、UNIQUE[USINGINDEXindex_clause]
12、PRIMARYKEY[USINGINDEXindex_clause]
13、R
14、EFERENCES[schema.]table[(column)][ONDELETECASCADE]
15、CHECK(condition)}constraint_state:==[NOTDEFERRABLE
16、DEFERRABLE[INITIALLY{IMMEDIATE
17、DEFERRED}]][DISABLE
18、ENABLE[VALIDATE
19、NOVALIDATE]]创建表时定义约束createtablecreate_table_cons(id1char(10)constraintcts_id_pkprimarykeyDeferra
20、bleInitiallydeferredusingindextablespaceind1_00001,id2varchar2(20))tablespaceusers;修改表时定义约束altertablecreate_table_consaddconstraintcts_id2_ukunique(id2)deferrableinitiallyimmediateusingindextablespaceind1_00001;启用约束对于当前已有索引的PRIMARYKEY和UNIQUE约束,启用NOVALIDATE约束比启用VALI
21、DATE约束要快得多,这是因为,如果约束是可延迟的,则不检查现有数据是否违反约束。不要求锁定表。ENABLENOVALIDATEaltertablecreate_table_consenablenovalidateconstraintcts_id_pk;启用ENABLENOVALIDAT