分类:
[oracle]--[PL/SQL]
小结:
enable/disable对未来的数据有约束/无约束。
validate/novalidate对已有的数据有约束/无约束。
注释:
1、
表中,未来的数据和已有的数据:
已有的数据,表示执行alter table test validate(或是Novalidate) constraint ck_id前已经在表test中存在的数据,或是执行alter table test validate(或是Novalidate) constraint ck_id后每当执行了一次DML操作引起了存放于表中的数据的变化时都会进行一次约束条件检查,而进行该约束条件检查时存在于表中的数据也被称作已有的数据。
未来的数据,表示执行alter table test Enable/Disable constraint ck_id后每当执行了一次DML操作时在修改后的数据存入表中来替代修改前值之前会进行一次约束条件检查。
这里要说说×表示什么意思?
disable和validate组合在一起时,由于disable是表示对未来的数据不受约束条件限制,即对DML操作修改过的数据都不进行约束条件检查。现在假设一条不符合约束条件的数据插入了表中,而Validate/Novalidate这组关键字是每次表中的数据有变化时进行一次约束条件检查,故而当Validate在该条不符合约束条件的数据插入了表后进行了一次约束条件检查,发现该数据不符合约束条件,就会报错。由此看出disable和validate组合在一起时,DML操作修改的数据存放在表中有可能会不符合约束条件,所以oracle设计人员就规定disable和validate组合在一起时不允许进行DML操作对该表。所以,X表示不允许执行DML操作的意思。所以,如果你不想某个表被DML操作修改,则可以采用disable和validate组合在一起的方法。
===============================================================================================
小结:
enable/disable对未来的数据有约束/无约束。
validate/novalidate对已有的数据有约束/无约束。
约束有如下四种状态
(1)ENABLEVALIDATE:约束在创建时,默认就是此状态。此状态会“检查表中原有行和新插入的行”。
(2)ENABLENOVALIDATE:不能输入违反约束的新数据。但是,在创建约束时,并不检查表中原有行。
(3)DISABLEVALIDATE:检查表中原有行是否违反约束,表中可以插入违反约束的行。
(4)DISABLENOVALIDATE:约束处于禁用状态,且此状态检查表中原有数据是否违反约束.
参考博客:http://blog.csdn.net/guoyjoe/article/details/8640270
注释:
1、
表中,未来的数据和已有的数据:
已有的数据,表示执行alter table test validate(或是Novalidate) constraint ck_id前已经在表test中存在的数据,或是执行alter table test validate(或是Novalidate) constraint ck_id后每当执行了一次DML操作引起了存放于表中的数据的变化时都会进行一次约束条件检查,而进行该约束条件检查时存在于表中的数据也被称作已有的数据。
未来的数据,表示执行alter table test Enable/Disable constraint ck_id后每当执行了一次DML操作时在修改后的数据存入表中来替代修改前值之前会进行一次约束条件检查。
2、
Enable/Disable和Validate/Novalidate这两组关键字修饰的都是同一个对象,即constraint这种类型的对象。
在修饰同一个对象时,两组关键字间是并列关系,即Enable/Disable这组关键字作用在未来的数据(即表上插入/更新/删除的数据)上,而Validate/Novalidate这组关键字作用在表上已有的数据上。
上图中,?表示不受约束条件限制,√表示受约束条件限制。这里要说说×表示什么意思?
disable和validate组合在一起时,由于disable是表示对未来的数据不受约束条件限制,即对DML操作修改过的数据都不进行约束条件检查。现在假设一条不符合约束条件的数据插入了表中,而Validate/Novalidate这组关键字是每次表中的数据有变化时进行一次约束条件检查,故而当Validate在该条不符合约束条件的数据插入了表后进行了一次约束条件检查,发现该数据不符合约束条件,就会报错。由此看出disable和validate组合在一起时,DML操作修改的数据存放在表中有可能会不符合约束条件,所以oracle设计人员就规定disable和validate组合在一起时不允许进行DML操作对该表。所以,X表示不允许执行DML操作的意思。所以,如果你不想某个表被DML操作修改,则可以采用disable和validate组合在一起的方法。
===============================================================================================
1组合特性说明
Enable/Disable和Validate/Novalidate这两组关键字修饰的都是同一个对象,即constraint这种类型的对象。
Validate的作用: 确保已有数据符合约束;