Oracle中Constraint的状态参数initially与deferrable
2012-09-11 17:15
267 查看
在Oracle数据库中,关于约束的状态有下面两个参数:
initially (initially immediate 或 initially deferred)
deferrable(deferrable 或 not deferrable)
第1个参数,指定默认情况下,约束的验证时刻(在事务每条子句结束时,还是在整个事务结束时)。
第2个参数,指定了在事务中,是否可以改变上一条参数的设置。
如果不指定上述参数,默认设置是 initially immediate not deferrable。
注意:如果约束是not deferrable,那么它只能是initially immediate,而不能是initially deferred。
测试①,initially immediate:
SQL> create table nlist (
2 nid number
3 );
Table created
SQL> alter table nlist add constraint pk_nlist primary key (nid) initially immediate;
Table altered
SQL> insert into nlist values (1);
1 row inserted
SQL> insert into nlist values (1);
insert into nlist values (1)
ORA-00001: 违反唯一约束条件 (TEST.PK_NLIST)
测试②,initially deferred:
SQL> create table nlist (
2 nid number
3 );
Table created
SQL> alter table nlist add constraint pk_nlist primary key (nid) initially deferred;
Table altered
SQL> insert into nlist values (1);
1 row inserted
SQL> insert into nlist values (1);
1 row inserted
SQL> commit;
commit
ORA-02091: 事务处理已回退
ORA-00001: 违反唯一约束条件 (TEST.PK_NLIST)
测试③,initially immediate deferrable:
SQL> create table nlist (
2 nid number
3 );
Table created
SQL> alter table nlist add constraint pk_nlist primary key (nid) initially immediate deferrable;
Table altered
SQL> set constraint pk_nlist deferred;
Constraints set
SQL> insert into nlist values (1);
1 row inserted
SQL> insert into nlist values (1);
1 row inserted
SQL> commit;
commit
ORA-02091: 事务处理已回退
ORA-00001: 违反唯一约束条件 (TEST.PK_NLIST)
测试④,initially deferred deferrable:
SQL> create table nlist (
2 nid number
3 );
Table created
SQL> alter table nlist add constraint pk_nlist primary key (nid) initially deferred deferrable;
Table altered
SQL> set constraint pk_nlist immediate;
Constraints set
SQL> insert into nlist values (1);
1 row inserted
SQL> insert into nlist values (1);
insert into nlist values (1)
ORA-00001: 违反唯一约束条件 (TEST.PK_NLIST)
测试⑤:
SQL> create table nlist (
2 nid number
3 );
Table created
SQL> alter table nlist add constraint pk_nlist primary key (nid) initially deferred no deferrable;
alter table nlist add constraint pk_nlist primary key (nid) initially deferred no deferrable
ORA-01735: 无效的 ALTER TABLE 选项
转载自http://hi.baidu.com/linkzq/item/be23df424c9312e3bdf4511c
initially (initially immediate 或 initially deferred)
deferrable(deferrable 或 not deferrable)
第1个参数,指定默认情况下,约束的验证时刻(在事务每条子句结束时,还是在整个事务结束时)。
第2个参数,指定了在事务中,是否可以改变上一条参数的设置。
如果不指定上述参数,默认设置是 initially immediate not deferrable。
注意:如果约束是not deferrable,那么它只能是initially immediate,而不能是initially deferred。
测试①,initially immediate:
SQL> create table nlist (
2 nid number
3 );
Table created
SQL> alter table nlist add constraint pk_nlist primary key (nid) initially immediate;
Table altered
SQL> insert into nlist values (1);
1 row inserted
SQL> insert into nlist values (1);
insert into nlist values (1)
ORA-00001: 违反唯一约束条件 (TEST.PK_NLIST)
测试②,initially deferred:
SQL> create table nlist (
2 nid number
3 );
Table created
SQL> alter table nlist add constraint pk_nlist primary key (nid) initially deferred;
Table altered
SQL> insert into nlist values (1);
1 row inserted
SQL> insert into nlist values (1);
1 row inserted
SQL> commit;
commit
ORA-02091: 事务处理已回退
ORA-00001: 违反唯一约束条件 (TEST.PK_NLIST)
测试③,initially immediate deferrable:
SQL> create table nlist (
2 nid number
3 );
Table created
SQL> alter table nlist add constraint pk_nlist primary key (nid) initially immediate deferrable;
Table altered
SQL> set constraint pk_nlist deferred;
Constraints set
SQL> insert into nlist values (1);
1 row inserted
SQL> insert into nlist values (1);
1 row inserted
SQL> commit;
commit
ORA-02091: 事务处理已回退
ORA-00001: 违反唯一约束条件 (TEST.PK_NLIST)
测试④,initially deferred deferrable:
SQL> create table nlist (
2 nid number
3 );
Table created
SQL> alter table nlist add constraint pk_nlist primary key (nid) initially deferred deferrable;
Table altered
SQL> set constraint pk_nlist immediate;
Constraints set
SQL> insert into nlist values (1);
1 row inserted
SQL> insert into nlist values (1);
insert into nlist values (1)
ORA-00001: 违反唯一约束条件 (TEST.PK_NLIST)
测试⑤:
SQL> create table nlist (
2 nid number
3 );
Table created
SQL> alter table nlist add constraint pk_nlist primary key (nid) initially deferred no deferrable;
alter table nlist add constraint pk_nlist primary key (nid) initially deferred no deferrable
ORA-01735: 无效的 ALTER TABLE 选项
转载自http://hi.baidu.com/linkzq/item/be23df424c9312e3bdf4511c
相关文章推荐
- Oracle中Constraint的状态参数initially与deferrable
- Oracle 约束(constraint)的几个参数的小研究
- [Oracle](不会的是三炮)把状态列表作为存储过程参数这件小事
- Oracle 约束(constraint)的几个参数的小研究
- 在Oracle关闭的状态下,如何修改参数文件spfile
- oracle constraint 约束 状态 详解
- Oracle监听服务lsnrctl参数及查询状态详解
- Oracle监听服务lsnrctl参数及查询状态详解
- ORACLE 10G 重要命令及参数详解
- 虚拟机增加硬盘以及更改ORACLE DB_RECOVERY_FILE_DEST参数实验
- Oracle性能参数—经典常用
- 查看oracle参数哪些是实时生效哪些是可以立即生效
- DB_NAME,SID,ORACLE_SID等参数的剖析
- oracle参数open_cursors和session_cached_cursor详解
- oracle 存储过程 带游标作为OUT参数输出
- Oracle监听状态查看
- Oracle TIMED_STATISTICS 参数 说明
- ORACLE 回收站当前状态查询整理
- oracle带输入与输出参数的调用
- Oracle安装相关Linux参数