这里找到一篇博文对这两个用法的解释:http://www.cnblogs.com/rootq/archive/2008/09/23/1297400.html
启用约束:
enable( validate) :启用约束,创建索引,对已有及新加入的数据执行约束. e
enable novalidate :启用约束,创建索引,仅对新加入的数据强制执行约束,而不管表中的现有数据.
禁用约束:
disable( novalidate):关闭约束,删除索引,可以对约束列的数据进行修改等操作.
disable validate :关闭约束,删除索引,不能对表进行 插入/更新/删除等操作.
这里自己做了下实验,也确实验证上面的说法。
下面是DISABLE VALIDATE的实验结果
declare num number; begin select count(1) into num from all_tables where TABLE_NAME = ‘TEST2‘; if num=1 then execute immediate ‘drop table TEST2‘; end if; end; / create table Test2( col1 int CONSTRAINT cons_test2_1 NOT NULL CHECK(col1>10) DISABLE VALIDATE, col2 varchar(100) null ); / insert into Test2(col1,col2) values(1,‘a‘); 在行 32 上开始执行命令时出错:insert into Test2(col1,col2) values(1,‘a‘)命令出错, 行: 32 列: 1错误报告:SQL 错误: ORA-25128: 不能对带有禁用和验证约束条件 (SYSTEM.SYS_C009875) 的表进行插入/更新/删除25128. 00000 - "No insert/update/delete on table with constraint (%s.%s) disabled and validated"*Cause: Try to insert/update/delete on table with DISABLE VALIDATE constraint.*Action: Change the constraint‘s states.
下面是ENANLE VALIDATE的实验结果
declare num number; begin select count(1) into num from all_tables where TABLE_NAME = ‘TEST2‘; if num=1 then execute immediate ‘drop table TEST2‘; end if; end; / create table Test2( col1 int CONSTRAINT cons_test2_1 NOT NULL CHECK(col1>10) ENABLE VALIDATE, col2 varchar(100) null ); / insert into Test2(col1,col2) values(1,‘a‘); 在行 32 上开始执行命令时出错:insert into Test2(col1,col2) values(1,‘a‘)错误报告:SQL 错误: ORA-02290: 违反检查约束条件 (SYSTEM.SYS_C009877)02290. 00000 - "check constraint (%s.%s) violated"*Cause: The values being inserted do not satisfy the named check *Action: do not insert values that violate the constraint.
下面是ENABLE NOVALIDATE的实验结果。
declare num number; begin select count(1) into num from all_tables where TABLE_NAME = ‘TEST2‘; if num=1 then execute immediate ‘drop table TEST2‘; end if; end; / create table Test2( col1 int, col2 varchar(100) null ); / insert into Test2(col1,col2) values(1,‘a‘); / alter table Test2 add CONSTRAINT cons_test2_1 CHECK(col1>10) ENABLE NOVALIDATE; / select * from Test2; / insert into Test2(col1,col2) values(2,‘b‘);
table TEST2 已创建。 1 行已插入。 table TEST2已变更。 >>Query Run In:查询结果 1
在行 41 上开始执行命令时出错: insert into Test2(col1,col2) values(2,‘b‘) 错误报告: SQL 错误: ORA-02290: 违反检查约束条件 (SYSTEM.CONS_TEST2_1) 02290. 00000 - "check constraint (%s.%s) violated" *Cause: The values being inserted do not satisfy the named check *Action: do not insert values that violate the constraint.
时间: 2024-10-11 13:21:20