ops$tkyte@ORA10G> create table p
2 ( pk int primary key )
3 /
Table created.
ops$tkyte@ORA10G> create table c
2 ( fk constraint c_fk
3 references p(pk)
4 deferrable
5 initially immediate
6 )
7 /
Table created.第二条创建表C的语句看不太明白 好像没有字段啊
但是后面依然可以往里插入数据
2 ( pk int primary key )
3 /
Table created.
ops$tkyte@ORA10G> create table c
2 ( fk constraint c_fk
3 references p(pk)
4 deferrable
5 initially immediate
6 )
7 /
Table created.第二条创建表C的语句看不太明白 好像没有字段啊
但是后面依然可以往里插入数据
解决方案 »
- ORACLE11g 我做了Create pfile from spfile;操作后,就无法找到SID了,我该如何做?
- 如何查看存储过程入参
- 10G中,CONNECT角色只有CREATE SESSION权限了?
- oracle存储过程能否返回本身的名字?
- 召唤Oracle高手
- Oracle9i安装出错,求助
- 请问导出数据是哪个权限
- maximum number of processes (150) exceeded
- 客户机不能连接到服务器,救命
- Pro C/C++在现实应用中的意义
- 如何卸载Oracle Developer Suite 10g
- 急求Oracle report 9i和 Oracle report 10g的下载地址!
命令
SQL>desc c
看一下就知道。至于deferrable initially immediate都是描述外键的属性,其中deferrable说明此外键是可延迟的,即对完整性的判断可以到commit时再进行。initially immediate说明对于上面的延迟性约束,在执行完一个sql语句后立即检查,而如果是initially deferred,则到commit时再检查。
有个地方看不明白 deferrable 说明此外键是可延迟的,对完整性的判断可以到commit时再进行
initially immediate 在执行完一个sql语句后立即检查,
这两个放在一起不是矛盾了吗
一个是commit才检查,一个sql执行完了就检查
==================================
约束的状态是可以通过命令更改的
initially immediate 只是指定了此约束初始化是immediate 的
你将来需要的话可以更改为deferrable
initially immediate和initically deferred指的是在约束的状态为deferrable的情况下,最开始(initically)是立即检查还是commit时检查,immediate和deferred可利用sqlplus命令
SET CONSTRAINT
来修改,如对楼主的例子,可以这样修改其状态SET CONSTRAINT c_fk DEFERRED;
SET CONSTRAINT c_fk IMMEDIATE;
错误是
ORA-02253:此处不允许约束条件说明就是第二行2 ( fk constraint c_fk 出错