Oracle deferrable、immediate 约束
来源:互联网 发布:怎么优化古墓丽影崛起 编辑:程序博客网 时间:2024/04/29 22:20
oracle数据库中的所有约束默认情况下都是立即触发的,也就是说在语句运行结束后数据库会检查数据的一致性状态.
其中not deferrable 与initially immediate是一样的,与deferrable initially immediate则不同。后者允许将constraint再改为initially deferred, 前者不允许更改:>create table test2 (f1 number(3) constraint fk references test(f1) initially immediate);
>alter table test2 modify constraint fk initially deferred;
alter table test2 modify constraint fk initially deferred
*
ERROR 位于第 1 行:
ORA-02447: 无法延迟不可延迟的约束条件
> create table test2 (f1 number(3) constraint fk references test(f1) deferrable initially immediate);
> alter table test2 modify constraint fk initially deferred;
表已更改。 [oracle@neworacle oracle]$ sqlplus mayp/maypSQL*Plus: Release 10.1.0.5.0 - Production on Thu Jun 26 11:05:50 2008Copyright (c) 1982, 2005, Oracle. All rights reserved.Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.5.0 - Production
With the Partitioning and Data Mining optionsSQL> create table p(x int);Table created.SQL> alter table p add constraint pk_p primary key(x) ;Table altered. SQL> insert into p values(1);1 row created.SQL> insert into p values(1);
insert into p values(1)
*
ERROR at line 1:
ORA-00001: unique constraint (MAYP.PK_P) violated
这里在没有commit前 oracle就已经检测到了主键重复.如果是deferrable约束呢?
SQL> set constraint pk_p deferred;
set constraint pk_p deferred
*
ERROR at line 1:
ORA-02447: cannot defer a constraint that is not deferrable
注意这里不能直接修改约束的状态,必须重新创建deferrable的约束后,才能修改。
SQL> alter table p drop constraint pk_p;
Table altered.
SQL> alter table p add constraint pk_p primary key(x) deferrable;
Table altered.
现在的约束为deferrable状态:
SQL> select x from p;
X
———-
1
SQL> set constraint pk_p deferred;
Constraint set.
SQL> insert into p values(1);
1 row created.
这里oracle还没有验证这个插入的1是重复的.提交的时候才验证.
SQL> commit;
commit
*
ERROR at line 1:
ORA-02091: transaction rolled back
ORA-00001: unique constraint (MAYP.PK_P) violated
如果修改约束为immediate呢?
SQL> set constraint pk_p immediate;
Constraint set.
SQL> insert into p values(1);
insert into p values(1)
*
ERROR at line 1:
ORA-00001: unique constraint (MAYP.PK_P) violated
约束状态回到了最初的情况.
deferrable估计在级联更新的情况下可以用到.
- Oracle deferrable、immediate 约束
- immediate约束和deferrable约束
- OCP-047约束延迟 SET CONSTRAINTS DEFERRABLE OR IMMEDIATE
- 《Oracle编程艺术》学习笔记(17)-DEFERRABLE约束
- DEFERRABLE约束切换实验
- OCP-047 SET CONSTRAINTS DEFERRABLE OR IMMEDIATE
- 定义可延迟(deferrable)的约束
- oracle Deferrable constraint 详解以及用法.
- oracle execute immediate
- ORACLE EXECUTE IMMEDIATE 用法
- ORACLE EXECUTE IMMEDIATE 小结
- ORACLE EXECUTE IMMEDIATE 小结
- oracle execute immediate 使用
- ORACLE EXECUTE IMMEDIATE 小结
- ORACLE EXECUTE IMMEDIATE 小结
- ORACLE EXECUTE IMMEDIATE 小结
- ORACLE EXECUTE IMMEDIATE
- ORACLE EXECUTE IMMEDIATE 小结
- 机器学习完整过程案例分布解析,python代码解析
- 无可用源||调试时源文件与模块生成时的文件不同||无法单步调试
- 经纬财富:淮北纸?白?银?投?资?的?十?八?条?小?技?巧
- 深入理解JavaScript系列 ----(9):根本没有“JSON对象”这回事!
- js读取xml数据
- Oracle deferrable、immediate 约束
- POJ1135_Domino Effect(最短路)
- 常州做乳腺纤维瘤最好的医院
- v4l2_device.c浅析
- Android 模拟器从局域网访问外部网络
- 各种导出下载
- Windows 9预览版今秋发布 正式版明年推出
- lr11 监控windows server 2003方法
- 收藏高精度模板