《维护数据完整性.优秀PPT.ppt》由会员分享,可在线阅读,更多相关《维护数据完整性.优秀PPT.ppt(51页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、OOracleracle体系结构与管理体系结构与管理第十三章第十三章 维护数据完整性维护数据完整性 本章要点本章要点数据完整性概述数据完整性概述 完整性约束完整性约束 实现约束实现约束 维护约束维护约束 查询约束信息查询约束信息 本章教学目标本章教学目标l理解数据完整性的基本概念及数据完整性规则;l理解Oracle数据库的完整性约束的条件、状态和检查时间等概念;l驾驭定义列级约束和表级约束的技术和方法;l驾驭添加、修改和删除约束的技术和方法。13.1 数据完整性概述数据完整性概述l数据完整性数据完整性 l 数据完整性是指存储在数据库中数据完整性是指存储在数据库中数据的一样性和正确性。依据数据完
2、整数据的一样性和正确性。依据数据完整性作用的数据库对象和范围不同,可以性作用的数据库对象和范围不同,可以将数据完整性分为将数据完整性分为:l实体完整性实体完整性(Entity Integrity)l域完整性域完整性(Domain Integrity)l引用完整性引用完整性(Reference Integrity)l用户定义完整性用户定义完整性(User Defined Integrity)13.1 数据完整性概述数据完整性概述l数据完整性数据完整性 l作用:作用:l实体完整性可以保证表内每条记录的唯实体完整性可以保证表内每条记录的唯一性。一性。l域完整性可以保证表内数据项的合理性域完整性可以保
3、证表内数据项的合理性和有效性。和有效性。l引用完整性又称参照完整性,可以保证引用完整性又称参照完整性,可以保证引用表和被引用表之间的数据一样性。引用表和被引用表之间的数据一样性。l用户定义完整性是指用户可以定义不属用户定义完整性是指用户可以定义不属于其他任何完整性分类的特定业务规则。于其他任何完整性分类的特定业务规则。13.1 数据完整性概述数据完整性概述l数据完整性规则数据完整性规则l Oracle应用于关系数据库数据完整性应用于关系数据库数据完整性有下列有下列4种类型的规则:种类型的规则:lNULL规则规则 在插入或修改表的行时是否在插入或修改表的行时是否允许包含有允许包含有NULL的值。
4、的值。l唯一性规则唯一性规则 保证插入或修改的记录在字保证插入或修改的记录在字段值上的唯一性。段值上的唯一性。l引用完整性规则引用完整性规则 保证多个相关表的一样保证多个相关表的一样性。性。l用户自定义规则用户自定义规则 可实现困难的完整性检可实现困难的完整性检查。查。13.1 数据完整性概述数据完整性概述l数据完整性规则数据完整性规则数据完整性的实现方法:应用程序代码完整性约束 数据库触发器13.1 数据完整性概述数据完整性概述l数据完整性规则数据完整性规则l利用完整性约束实施数据完整性规则有下利用完整性约束实施数据完整性规则有下列优点:列优点:l创建或修改表时干脆通过创建或修改表时干脆通过
5、SQL语句定义完语句定义完整性约束,无需额外的编程,可削减程序整性约束,无需额外的编程,可削减程序性错误。性错误。l完整性约束存储在数据字典中,任何进入完整性约束存储在数据字典中,任何进入表中的数据都必需接受完整性约束,可以表中的数据都必需接受完整性约束,可以保证数据库中全部数据的完整性。保证数据库中全部数据的完整性。l运用完整性约束可以分别数据和程序。运用完整性约束可以分别数据和程序。lDBA可以通过约束管理语句敏捷地设置可以通过约束管理语句敏捷地设置完整性约束的有效性。完整性约束的有效性。l由于完整性约束存储在数据字典中,由于完整性约束存储在数据字典中,DBA、开发人员和应用程序可以快速查
6、、开发人员和应用程序可以快速查询事务规则,选择正确的操作或数据。询事务规则,选择正确的操作或数据。13.2 完整性约束完整性约束l约束条件约束条件 非空约束(NOT NULL)唯一性约束(UNIQUE)主键约束(PRIMARY KEY)外键约束(FOREIGN KEY)检查约束(CHECK)13.2 完整性约束完整性约束l约束条件约束条件 通过EMPLOYEE表的创建说明各种约束条件的作用。CREATE TABLE EMPLOYEE (EMPNO NUMBER(10)PRIMARY KEY,NAME VARCHAR2(40)NOT NULL,SEX CHAR(1),DEPTNO NUMBER(
7、2)DEFAULT 10,SALARY NUMBER(7,2)CHECK(SALARYSET CONSTRAINT ALL IMMEDIATE;l该吩咐将全部可延迟约束设置为马上检验模式。该吩咐将全部可延迟约束设置为马上检验模式。13.2 完整性约束完整性约束l约束检查的时间约束检查的时间 l2.可延迟约束可延迟约束l设置当前会话级的检验模式,可以执行下列设置当前会话级的检验模式,可以执行下列吩咐:吩咐:lALTER SESSION lSET CONSTRAINT=IMMEDIATE|DEFERRED|DEFAULT;lDEFAULT表示保持原来的检验模式。表示保持原来的检验模式。13.3 实
8、现约束实现约束l 定义列级约束定义列级约束 【任务13.1】创建STUDENTS表时,对表中各字段设置完整性约束,如ID字段定义为该表的主键,并且设置为可延迟约束,约束为激活状态,NAME、SEX、COURSE和SCORE字段定义NOT NULL约束。13.3 实现约束实现约束l 定义列级约束定义列级约束 作用于单个列上的约束称之为列级约束。列级约束是在定义列的子句中设置。列级约束定义子句的语法为:column datatype CONSTRAINT constraint NOT NULL|UNIQUE USING INDEX index_clause|PRIMARY KEY USING IN
9、DEX index_clause|REFERENCES schema.table(column)ON DELETE CASCADE|CHECK(condition)NOT DEFERRABLE|DEFERRABLE INITIALLY IMMEDIATE|DEFERRED DISABLE|ENABLE VALIDATE|NOVALIDATE13.3 实现约束实现约束l 定义列级约束l各关键字和参数的含义如下:lconstraint 定义约束名。假如缺省,Oracle自动命名。lNOT NULL 定义NOT NULL约束。假如为NOT NULL,表示该列不允许有空值;假如为NULL,表示该列可以
10、有空值。lUNIQUE 定义唯一性约束,并可以通过index_clause子句定义索引。lPRIMARY KEY 定义主键约束,并可以通过index_clause子句定义索引。lREFERENCES 定义外键约束,并指出被引用表的表名和列。lON DELETE CASCADE 表示当删除父表的数据时,将子表中与父表被删除数据相关的数据一起删除。lCHECK 定义检查约束。13.3 实现约束实现约束l 定义列级约束l各关键字和参数的含义如下:lNOT DEFERRABLE 定义非延迟约束。该值是缺省值。lDEFERRABLE 定义可延迟约束。lINITIALLY IMMEDIATE 设置约束检查
11、为马上检验模式。该值是缺省值。lINITIALLY DEFERRED 设置约束检查为延迟检验模式。lENABLE 设置约束为激活状态。该值是缺省值。lDISABLE 设置约束为禁用状态。lVALIDATE 设置约束为验证状态。该值是缺省值。lNOVALIDATE 设置约束为非验证状态。13.3 实现约束实现约束l 定义列级约束定义列级约束SQLCREATE TABLE TEST.STUDENTS 2 (ID VARCHAR2(10)3 CONSTRAINT STUDENTS_ID_PK PRIMARY KEY4 DEFERRABLE 5 USING INDEX6 STORAGE(INITIAL
12、 100K NEXT 100K)7 TABLESPACE INDEXS8 ENABLE,9 NAME VARCHAR2(10)NOT NULL,10 SEX VARCHAR2(2)NOT NULL,11 COURSE VARCHAR2(20)NOT NULL,12 SCORE NUMBER(3)13 TABLESPACE USER01 14 PCTFREE 20 15 PCTUSED 40 16 INITRANS 1 17 MAXTRANS 100 18 STORAGE(19 INITIAL 400K 20 NEXT 400K 21 MINEXTENTS 2 22 MAXEXTENTS 200
13、23 PCTINCREASE 20 24 BUFFER_POOL RECYCLE);13.3 实现约束实现约束l定义表级约束定义表级约束【任务13.2】创建EMPLOYEE表时,对表中FIRST_NAME和LAST_NAME两个字段组合在一起设置成唯一性约束,该约束为表级约束。13.3 实现约束实现约束l定义表级约束定义表级约束 l表级约束子句的语法为:表级约束子句的语法为:l CONSTRAINT constraintl PRIMARY KEY(column,column.)l USING INDEX index_clausel|UNIQUE(column,column.)l USING I
14、NDEX index_clausel|FOREIGN KEY(column,column.)l REFERENCES schema.table(column,column.)l ON DELETE CASCADEl|CHECK(condition)l NOT DEFERRABLE|DEFERRABLE INITIALLY IMMEDIATE|DEFERREDl DISABLE|ENABLE VALIDATE|NOVALIDATEl 除了不能在表级约束子句中不能定义除了不能在表级约束子句中不能定义NOT NULL约束外,该子句全部关键字和参数的含义约束外,该子句全部关键字和参数的含义同列级约束定
15、义子句是一样的。同列级约束定义子句是一样的。13.3 实现约束实现约束l定义表级约束定义表级约束 SQLCREATE TABLE TEST.EMPLOYEE2 (EMPNO NUMBER(10)PRIMARY KEY,3 FIRST_NAME VARCHAR2(40)NOT NULL,4 LAST_NAME VARCHAR2(40)NOT NULL,5 SEX CHAR(1),6 DEPTNO NUMBER(2)7 SALARY NUMBER(7,2)CHECK(SALARY ALTER TABLE TEST.STUDENTS l2 ADD(CONSTRAINT SCORE_CHECK l3
16、CHECK(score=0 and scoreALTER TABLE TEST.STUDENTS 2 ADD(CONSTRAINT SCORE_CHECK3 CHECK(score=0 and scoreALTER TABLE TEST.STUDENTS 2 MODIFY CONSTRAINT SCORE_CHECK 3 ENABLE;结果显示为:表已更改。13.4 维护约束维护约束l修改约束状态修改约束状态修改约束状态为验证状态:SQLALTER TABLE TEST.STUDENTS 2 MODIFY CONSTRAINT SCORE_CHECK 3 VALIDATE;结果显示为:表已更改
17、。13.4 维护约束维护约束l修改约束状态修改约束状态修改约束状态为非验证状态:SQLALTER TABLE TEST.STUDENTS 2 MODIFY CONSTRAINT SCORE_CHECK 3 NOVALIDATE;结果显示为:表已更改。13.4 维护约束维护约束l修改约束状态修改约束状态设置约束状态为ENABLE VALIDATE:SQLALTER TABLE TEST.STUDENTS 2 MODIFY CONSTRAINT SCORE_CHECK 3 ENABLE VALIDATE;结果显示为:表已更改。13.4 维护约束维护约束l修改约束状态修改约束状态 利用ALTER T
18、ABLE语句也可以修改约束的状态,其语法为:ALTER TABLE schema.table|ENABLE|DISABLE|NOVALIDATE|NOVALIDATE CONSTRAINT constraint|PRIMARY KEY|UNIQUE(column,column .)USING INDEX index_clause;13.4 维护约束维护约束l修改约束状态修改约束状态激活SCORE_CHECK约束,并设置该约束为验证状态:SQLALTER TABLE TEST.STUDENTS 2 ENABLE VALIDATE CONSTRAINT SCORE_CHECK;要禁用SCORE_C
19、HECK约束,并设置该约束为非验证状态:SQLALTER TABLE TEST.STUDENTS 2 DISABLE NOVALIDATE CONSTRAINT 3 SCORE_CHECK;13.4 维护约束维护约束l修改约束延迟修改约束延迟l 【任务【任务13.5】为表为表STUDENTS的的SEX字段定义一个可延迟约束,使之只能为字段定义一个可延迟约束,使之只能为1或或0,并设置其为马上检验模式或延迟,并设置其为马上检验模式或延迟检验模式。检验模式。13.4 维护约束维护约束l修改约束延迟修改约束延迟为表TEST.STUDENTS的SEX定义一个非延迟约束。SQLALTER TABLE T
20、EST.STUDENTS 2 ADD(CONSTRAINT SEX_CHECK 3 CHECK(SEX=0 or SEX=1)4 NOT DEFERRABLE);结果显示为:表已更改。13.4 维护约束维护约束l修改约束延迟修改约束延迟l设置延迟检验模式。设置延迟检验模式。lSQLALTER TABLE TEST.STUDENTSl 2 MODIFY CONSTRAINT SEX_CHECK l 3 INITIALLY DEFERRED;l设置为马上检验模式。设置为马上检验模式。lSQLALTER TABLE TEST.STUDENTSl 2 MODIFY CONSTRAINT SEX_CHE
21、CK l 3 INITIALLY IMMEDIATE;13.4 维护约束维护约束l修改约束延迟修改约束延迟l 执行下面的吩咐将当前事务的全部可延迟执行下面的吩咐将当前事务的全部可延迟约束设置马上检验模式。约束设置马上检验模式。l SQLSET CONSTRAINTS ALL IMMEDIATE;l 执行下面的吩咐将当前事务的全部可延迟执行下面的吩咐将当前事务的全部可延迟约束设置延迟检验模式。约束设置延迟检验模式。l SQLSET CONSTRAINTS ALL DEFERRED;13.4 维护约束维护约束l删除约束删除约束【任务13.6】删除一个无用的约束。删除约束子句drop_constra
22、int_clause的语法为:DROP|CONSTRAINT constraint|PRIMARY KEY|UNIQUE(column,column.)|CASCADE KEEP|DROP INDEX;13.4 维护约束维护约束l删除约束删除约束 l其中各关键字的含义为:其中各关键字的含义为:lCONSTRAINT 要删除的约束名。要删除的约束名。lPRIMARY KEY 删除的主键约束。当删删除的主键约束。当删除主健约束时,相关的唯一性索引同时除主健约束时,相关的唯一性索引同时被删除。被删除。lUNIQUE 删除的唯一性约束。当删除唯删除的唯一性约束。当删除唯一性约束时,相关的唯一性索引同时
23、被一性约束时,相关的唯一性索引同时被删除。删除。lCASCADE 运用该参数可以删除引用该运用该参数可以删除引用该表主键的全部外键约束,然后删除唯一表主键的全部外键约束,然后删除唯一性约束和主键约束。性约束和主键约束。lDROP INDEX 在删除主键约束和唯一在删除主键约束和唯一性约束时,性约束时,Oracle将删除约束所对应的将删除约束所对应的索引。该选项为默认值。索引。该选项为默认值。lKEEP INDEX 假如只删除约束而保留假如只删除约束而保留索引,可以运用索引,可以运用KEEP INDEX。13.4 维护约束维护约束l删除约束删除约束 l删除删除TEST.STUDENTS表中的表中
24、的STUDENTS_ID_PK主键约束。主键约束。lSQLALTER TABLE TEST.STUDENTSl 2 DROP CONSTRAINT STUDENTS_ID_PKl 3 CASCADE;l执行下列吩咐也可以删除执行下列吩咐也可以删除STUDENTS_ID_PK主键约束。主键约束。lSQLALTER TABLE TEST.STUDENTSl 2 DROP PRIMARY KEYl 3 CASCADE;13.4 维护约束维护约束l删除约束删除约束 l 在具有主键约束和外键约束的主表和子在具有主键约束和外键约束的主表和子表之间执行表之间执行DDL语句或语句或DML语句时应留语句时应留意
25、以下几点:意以下几点:l在删除主表之前,必需首先删除外键约束。在删除主表之前,必需首先删除外键约束。l在截断(在截断(TRUNCATE)主表时,首先应)主表时,首先应禁止子表的外键。禁止子表的外键。l在删除包含有主表的表空间时,应首先删在删除包含有主表的表空间时,应首先删除外键约束。除外键约束。l在删除主表中的记录时,假如在在删除主表中的记录时,假如在DELETE语句中没有运用语句中没有运用ON DELETE CASCADE 或或ON DELETE SET NULL子句时,应确子句时,应确保子表中没有与主键对应的记录。保子表中没有与主键对应的记录。13.5 查询约束信息查询约束信息视 图 名
26、称说 明DBA_CONSTRAINTSALL_CONSTRAINTSUSER_CONSTRAINTS 描述了所有约束的基本信息,包括约束的名称、类型、状态、延迟性等。DBA_CONS_COLUMNSALL_CONS_COLUMNSUSER_CONS_COLUMNS 描述了与约束相关字段的信息。13.5 查询约束信息查询约束信息查询TEST.STUDENTS表中的约束信息。SQLSELECT CONSTRAINT_NAME NAME,2 CONSTRAINT_TYPE,3 STATUS,4 DEFERRABLE,5 DEFERRED,6 VALIDATED7 FROM ALL_CONSTRAIN
27、TS 8 WHERE TABLE_NAME=STUDENTS;结果显示为:NAME C STATUS DEFERRABLE DEFERRED VALIDATED-STUDENTS_PK P DISABLED NOT DEFERRABLE IMMEDIATE VALIDATEDSEX_CHECK C ENABLED DEFERRABLE IMMEDIATE VALIDATED13.5 查询约束信息查询约束信息查询TEST.STUDENTS表中各字段的约束信息。SQLSELECT CONSTRAINT_NAME,2 COLUMN_NAME 3 FROM ALL_CONS_COLUMNS 4 WHE
28、RE TABLE_NAME=STUDENTS;结果显示为:CONSTRAINT_NAME COLUMN_NAME-STUDENTS_PK IDSEX_CHECK SEX13.6 本章小结本章小结1)数据完整性是指存储在数据库中数据的一样性和正确性。数据完整性分为实体完整性、域完整性、引用完整性和用户定义完整性。实体完整性可以保证表内每条记录的唯一性。域完整性可以保证表内数据项的合理性和有效性。引用完整性又称参照完整性,可以保证引用表和被引用表之间的数据一样性。用户定义完整性是指用户可以定义不属于其他任何完整性分类的特定业务规则。2)Oracle允许定义和实施了NULL规则、唯一性规则、引用完整
29、性规则和用户自定义规则,这些规则可用应用程序代码、完整性约束和数据库触发器实现。运用完整性约束是保证数据完整性最常用的方法。13.6 本章小结本章小结l在Oracle中,约束条件主要包括非空约束、唯一性约束、主键约束、外键约束和检查约束。非空约束、检查约束一般为程序开发人员关切的问题,而DBA主要负责唯一性约束、主键约束和外键约束。lOracle将完整性约束组合成4种状态,具体为ENABLE VALIDATE、ENABLE NOVALIDATE、DISABLE VALIDATE、DISABLE NOVALIDATE。这4中状态可以对将要输入到表中的数据进行完整性约束的检查,也可以对表中已有的数
30、据进行完整性约束的验证。13.6 本章小结本章小结lOralce约束可分为非延迟约束和可延迟约束两种。非延迟约束也叫马上约束,是在一条DML语句执行完后马上进行完整性约束检查,假如发觉数据不满足约束条件,则回退该操作。可延迟约束是指可以指定约束检查的时间,可以在DML语句执行完后不马上进行约束检查,而是延迟到事务提交吩咐COMMIT执行时检查。假如检查数据不符合约束条件,则Oracle回退整个事务操作。13.6 本章小结本章小结lOracle的完整性约束可以在创建表时定义,也可以在修改表时增加新的约束,在定义约束的同时设置约束的状态和检查时间。作用于单个列上的约束称之为列级约束,作用在一个表中多个列上的约束叫表级约束。列级约束在定义列的子句中设置,表级约束必需在表一级设置约束子句。l维护约束包括增加一个新约束、修改已有约束的状态、重新命名以及删除约束。维护约束语句为ALTER TABLE。