欢迎来到天天文库
浏览记录
ID:38112946
大小:46.50 KB
页数:3页
时间:2019-05-25
《维护数据完整性》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、征信软件开发部数据库小组维护数据完整性1.维护数据完整性的三种途径n应用程序n数据库触发器通常只有在完整性约束不能够完全定义复杂的业务逻辑时才使用。n定义的完整性约束优点:u提供更高的效率u更容易定义和修改u规则管理更加集中u更灵活(disable和enable)u在数据字典中可以查找完整定义2.完整性约束的种类nNOTNULLnUNIQUEnPRIMARYKEYnFOREIGNKEYnCHECK(用于定义表中每列或者几列必须满足的条件)3.约束状态nDISABLENOVALIDATE无论是老数据还是新数据都不遵守约束nDISABLEVALIDATE如果置于这个状态所有关于约束的
2、列都不允许修改(modify)。另外在这个约束上的索引被dropped,这个约束isdisabled。注释:如果这个约束isdeferrable,索引不会被dropped。nENABLENOVALIDATE这种状态下,新数据如果违反了约束,不允许插入。但表中可能包含某些违反约束的数据。这种情况在OLTP系统向数据仓库加载数据比较适用。nENABLEVALIDATE新的违反约束的数据不允许被插入,老数据也不允许违反约束。如果一个约束由别的状态改为ENABLE陈陵涛第3页2021-08-07征信软件开发部数据库小组VALIDATE,数据库将花费很长的时间检查老数据,导致其他DML操作
3、(如数据加载)等待。所以通常情况下,先改为ENABLENOVALIDATE,然后再改为ENABLEVALIDATE。通常ENABLE暗示了VALIDATE,DISABLE暗示了NOVALIDATE,除非特别指出。n如果一个唯一或者主键约束由DISABLE改为ENABLE,将会自动创建唯一索引。反之,索引将被dropped。n由NOVALIDATE改为VALIDATE,所有的数据将被检查一遍。n将一个独立的约束改为ENABLENOVALIDATE改为ENABLEVALIDATE不会导致其他DDL语句的读写锁。1.约束检查nNondeferredorimmediatenDeferre
4、d(当整个事务全部提交时,才进行约束检查)定义约束Immediate或者DeferredALTERSESSIONSETCONSTRAINT[S]={IMMEDIATE
5、DEFERRED
6、DEFAULT}2.创建表时定义约束创建表时定义约束采用下列语法:columndatatype[CONSTRAINTconstraint]{[NOT]NULL
7、UNIQUE[USINGINDEXindex_clause]
8、PRIMARYKEY[USINGINDEXindex_clause]
9、REFERENCES[schema.]table[(column)][ONDELETECASCADE]
10、CH
11、ECK(condition)}constraint_state:==[NOTDEFERRABLE
12、DEFERRABLE[INITIALLY{IMMEDIATE
13、DEFERRED}]][DISABLE
14、ENABLE[VALIDATE
15、NOVALIDATE]]3.定义约束时的考虑n主键或者唯一约束将索引放在单独的表空间大量加载(bulkloads)频繁发生时,采用非唯一的索引nSelf-reference外键在初始加载后再定义或者enable外键陈陵涛第3页2021-08-07征信软件开发部数据库小组延迟约束检查1.使用EXCEPTIONS表1)创建意外表2)运用EXCEPTIONS
16、子句执行ALTERTABLE命令SQL>ALTERTABLEhr.employeeENABLEVALIDATECONSTRAINTemployee_dept_id_fkEXCEPTIONSINTOsystem.exceptions;3)从EXCEPTION表中查找不合格数据4)纠正数据错误5)TruncateEXCEPTION表重新激活约束。2.获取约束信息从下列视图中获取约束信息:DBA_CONTRAINTSDBA_CONS_COLUMNSDBA_CONTRAINTS表中字段定义如下表:NameDescriptionCONSTRAINT_TYPEThetypeofconstra
17、intisPifPrimaryKey,UifUnique,Rifforeignkey,orCifCheckconstraint.NOTNULLconstraintsarestoredascheckconstraints.SEARCH_CONDITIONShowstheconditionspecifiedforacheckconstraintR_OWNERR_CONSTRAINT_NAMEDefinestheownerandnameofthereferencedconstraint
此文档下载收益归作者所有