《数据完整性的维护.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《数据完整性的维护

数据完整性的维护 数据库设计中有一个重要的环节就是建立数据模型来体现业务流程和规则。数据完整性就是业务规则的一种体现,是业务流程能够正常运转的保证。如何来实现数据的完整性呢?主要可以通过以下三个途径来实现: 应用程序代码实现 数据库的触发处理 数据完整性约束的定义 应用程序代码实现: 指通过数据库的后台程序或客户端的应用程序来实现 数据库的触发处理: 指当一个事件(比如INSERT一条记录或UPDATE一个表的某个字段)产生时,一个和这个事件相关的PL/SQL程序是否可以执行。数据库触发器一般是应用于复杂业务规则中,因为数据完整性约束不好定义。 下面是这篇文章主要要讲解的数据完整性约束的定义 使用数据完整性约束的优越性: 提供优良的性能 不需要编码,容易定义和修改 集中式管理 灵活性高(可以DISABLED或ENABLED) 在数据字典中有完整的记录 约束的种类: NOT NULL UNIQUE PRIMARY KEY:一个表只能有一个主键,相当于NOT NULL+UNIQUE CHECK FOREIGN KEY 约束的状态: DISABLE NOVALIDATE :不检查表中数据的完整性,同时新增的数据是否符合约束也不做检查,缺省状态 DISABLE VALIDATE : 任何对于该约束的修改都是不允许的 SQL alter table b2 disable novalidate constraints b2_con; 表已更改。 SQL insert into b2 (b) values(10); insert into b2 (b) values(10) ERROR 位于第 1 行: ORA-25128: 不能对带有禁用和验证约束条件 (SYS.B2_CON) 的表进行插入/更新/删除 ENABLE NOVALIDATE :任何违反约束的新数据都不能执行,但对表中已有违反约束的数据不做检查。 ENABLE VALIDATE : 任何违反约束的新数据都不能执行,并对表中已有的数据的合法性进行检查,缺省状态。如果一个约束从DISABLE状态直接变成ENALBE VALIDATE状态,则这个表将锁住并检查数据的合法性,这将影响DML操作,造成等待。所以应该先从DISABLE状态改变成ENABLE NOVALIDATE状态,再改变成ENABLE VALIDATE状态。 注意点: 当一个UNIQUE,PARIMAY KEY约束从ENABLE转变成DISABLE状态,则这个约束上的UNIQUE索引(自动创建的或手工创建的,如果先手工创建了一个索引,则创建约束时不再自动创建索引了,而直接应用手工创建的索引)DROP了。如果从DISABLE状态转变成ENABLE状态,数据库会自动以约束名创建一个UNIQUE索引。 如果CONSTRAINTS是DEFERRED,则索引不会DROP掉。当CONSTRAINTS创建时是DEFERRED,则自动创建的索引是NONUNIQUE。 SQL create table test1 (a varchar2(10),b varchar2(10)); 表已创建。 SQL create unique index test1_inx on test1(a); 索引已创建。 SQL alter table test1 add constraints test1_con primary key(a,b); 表已更改。 SQL select index_name from dba_indexes where table_name=TEST1; INDEX_NAME ------------------------------ TEST1_INX TEST1_CON SQL ALTER TABLE TEST1 DISABLE constraints test1_con; 表已更改。 SQL / INDEX_NAME ------------------------------ TEST1_INX SQL ALTER TABLE TEST1 enable constraints test1_con; 表已更改。 SQL / INDEX_NAME ------------------------------ TEST1_INX TEST1_CON 约束的检查方式: Immediate constraints :应用于每条DML语句,不可应用在一个事务处理之后 Deferred constraints : 应用在事务处理中,在事务提交之前仅仅是检查,如果在递交的时候,发现有不合法数据,整个事务回退。 设置约束检查方式的语法: SET CONSTRAINTS语句:

文档评论(0)

wwy463wj + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档