oracle constraint 约束 状态 详解

原创 2017年03月01日 11:54:11

1.约束一共有四种状态

a、enable validate-要求新旧数据必须同时满足约束规则-在规则正在进行中时是不容许在表上进行任何 DML 操作的
b、enable novalidate-已存在数据可以不满足,但是新数据必须满足
c、disable validate-不容许在表上进行任何 DML 操作,对主键和唯一约束来说,会删除相应的唯一索引,但 约束规则仍然有效
d、disable novalidate-数据不满足约束规则,对主键和唯一约束来说,会删除相应的唯一索引

记忆方式:

DISABLE 和ENABLE 是针对新增的数据是否符合约束,NOVALIDATE 和VALIDATE是针对已经存在的数据是否符合约束。
如果是DISABLE 就是允许新数据进来,那么唯一索引就得删除。
如果是validate就是保证现有数据完整性,那么就要锁表,不允许任何DML。

You can specify that a constraint is enabled (ENABLE) or disabled (DISABLE). If a constraint is enabled, data is checked as it is entered or updated in the database, and data that does not conform to the constraint is prevented from being entered. If a constraint is disabled, then data that does not conform can be allowed to enter the database.

Additionally, you can specify that existing data in the table must conform to the constraint (VALIDATE). Conversely, if you specifyNOVALIDATE, you are not ensured that existing data conforms.

An integrity constraint defined on a table can be in one of the following states:

ENABLE, VALIDATE

ENABLE, NOVALIDATE

DISABLE, VALIDATE

DISABLE, NOVALIDATE

2.检测时间
INITIALLY IMMEDIATE 初始化立即执行–在每条语句执行结束时检验约束
INITALLY DEFERRED 初始化延迟执行,一直等到事务完成后(或者调用 set constraint immediate 语句时)才检验约束

3.使用场景:

  • DISABLE NOVALIDATE
    不检查新数据和现有数据,因此这些数据可能不符合约束条件。
    当数据来自验证过的源,而且表是只读表时,通常会使用此状态。因此,不会将新数据输入表中。在已清理了数据的数据仓库环境中使用NOVALIDATE。此时不需要进行验证,因而可以节省很多时间。
  • DISABLE VALIDATE
    如果约束条件处于此状态,则不允许对有约束条件的列进行任何修改。因为如果在验证现有数据后,又允许将未经检查的数据输入表中,就会出现不一致的情况。通常,在必须验证现有数据但不进行修改时,以及不需要索引来提高性能时,可使用此状态。
  • ENABLE NOVALIDATE
    新数据符合约束条件,但现有数据处于未知状态。通常在确信表中只存在纯净数据和符合规则的数据的情况下使用该状态,此时不需要进行验证。但是,不允许将违反规则的新数据输入到系统中。
  • ENABLE VALIDATE
    新数据与现有数据均符合约束条件。这是约束条件的典型状态和默认状态。

eg1:

A constraint in a table is defined with the INITIALLY IMMEDIATE clause. You executed the
ALTER TABLE command with the ENABLE VALIDATE option to enable the constraint that was
disabled.What are the two effects of this command? (Choose two.)
选项
A.It fails if any existing row violates the constraint.
B.It does not validate the existing data in the table.
C.It enables the constraint to be enforced at the end of each transaction.
D.It prevents insert, update, and delete operations on the table while the constraint is in the
process of being enabled.

Correct Answers: A D

eg2:

Examine the following statement that is used to modify the primary key constraint on the
SALES table:
SQL> ALTER TABLE SALES MODIFY CONSTRAINT pk DISABLE VALIDATE;
Which three statements are true regarding the above command? (Choose three.)
选项
A.The constraint remains valid.
B.The index on the constraint is dropped.
C.It allows the loading of data into the table using SQL *Loader.
D.New data conforms to the constraint, but existing data is not checked.
E.It allows the data manipulation on the table using INSERT/UPDATE/DELETE SQL statements.

Correct Answers: A B C

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

OCP-1Z0-052-V8.02-10题

10. Examine the following statement that is used to modify the constraint on the SALES table: SQL> ...
  • rlhua
  • rlhua
  • 2013年10月03日 11:43
  • 13070

Oracle之唯一性约束(UNIQUE Constraint)用法详解

Oracle中主键和唯一约束的区别,如何创建、删除、启用和禁用唯一约束
  • jssg_tzw
  • jssg_tzw
  • 2014年11月10日 18:59
  • 14974

Oracle 11g学习笔记--约束(constraint )的使用

Oracle 11g–constraint的使用该关键词是为了添加约束条件约束条件
  • E_xiake
  • E_xiake
  • 2016年10月11日 16:49
  • 599

oracle 建表 约束 constraint

约束命名规则        如果不指定约束名Oracle server 自动按照SYS_Cn 的格式指定约束名,也可手动指定,        推荐的约束命名是:约束类型_表名_列名。      ...
  • y112102
  • y112102
  • 2011年10月08日 11:22
  • 5872

Oracle数据库约束(constraint)

最近一张表上有两列字段,要求这两列要么都有值,要么都为空,简单的table定义没办法实现这种要求,需要利用Oracle的constraint(约束)机制。约束主要是用来保证数据的完整性。   可以从...

Oracle4-之约束关键字constraint

约束简介 约束用于确保数据库数据满足特定的商业逻辑或者企业规则,如果定义了约束,并且数据不符 合约束,那么DML操作(INSERT、UPDATE、DELETE)将不能成功执行。约束包括NOT ...

Oracle 唯一 约束(unique constraint) 与 索引(index) 关系说明

一. 官网对Unique Constraints说明http://download.oracle.com/docs/cd/E11882_01/server.112/e16508/datainte.ht...

Oracle Constraint_type,约束类型

select distinct constraint_type from dba_constraints; Type Code Type Description ...

Oracle数据库Constraint约束的常用操作及异常处理

1.报告约束异常   如果校验约束时存在异常,则返回一个错误,且完整性约束仍保持未被校验状态.当约束存在异常时,一个语句就不能正确执行,则此语句被回滚.如果存在异常,必须要更新或删除了约束的所有异常...

oracle:表、列、约束等操作,table,constraint,column

创建表的语法 GLOBAL TEMPORARY 说明该表为临时表。行的有效期有 ON COMMIT 子句决定。临时表对于说有会话都可见,但是这些行则是特定于某个会话的。 const...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:oracle constraint 约束 状态 详解
举报原因:
原因补充:

(最多只允许输入30个字)