精华内容
下载资源
问答
  • oracle 禁用外键约束

    千次阅读 2018-06-05 15:30:00
    1、ORACLE数据库中的外键约束名都在表user_constraints中可以查到。其中constraint_type='R'表示是外键约束。2、启用外键约束的命令为:alter table table_name enable constraint constraint_name3、禁用外键约束的...

    1、ORACLE数据库中的外键约束名都在表user_constraints中可以查到。其中constraint_type='R'表示是外键约束。
    2、启用外键约束的命令为:alter table table_name enable constraint constraint_name 
    3、禁用外键约束的命令为:alter table table_name disable constraint constraint_name
    4、然后再用SQL查出数据库中所以外键的约束名:
    select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints where constraint_type='R'
    select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints where constraint_type='R'

    转载于:https://www.cnblogs.com/chbyiming-bky/p/9140038.html

    展开全文
  • Oracle 添加外键

    2010-10-26 11:03:58
    创建外键约束时假如使用Oracle默认的创建方式,在删除被参照的数据时,将无法被删除,这一点在Oracle9i中给了我们更多灵活的选择,我们可是使用on delete cascade和 on delete set null要害字来决定删除被参照数据时...
    创建外键约束时假如使用Oracle默认的创建方式,在删除被参照的数据时,将无法被删除,这一点在Oracle9i中给了我们更多灵活的选择,我们可是使用on delete cascade和 on delete set null要害字来决定删除被参照数据时是否要将参照这个数据的那些数据一并删除,还是将那些参照这条数据的数据的对应值赋空。
    

      例如下面这两个表中分别存的时员工的基本信息和公司的部门信息。我们为

    create table dept
    (deptno number(10) not null,
    deptname varchar2(30) not null,
    constraint pk_dept primary key(deptno));

    create table emp
    ( empno number(10) not null,
    fname varchar2(20) ,
    lname varchar2(20) ,
    dept number(10) ,
    constraint pk_emp primary key(empno));

      然后我们现在分别使用这两个要害字来增加外键试一下,首先我们来试一下on delete cascade

    alter table emp
    add constraint fk_emp_dept foreign key(dept) references dept(deptno) on delete cascade;

      先增加外键。然后插入数据。

    insert into dept values(1,’销售部’);
    insert into dept values(2,’财务部’);
    insert into emp values (2,’Mary’,'Song’,1);
    insert into emp values (3,’Linda’,'Liu’,2);
    insert into emp values (4,’Linlin’,'Zhang’,1);

      然后现在我要删除销售部,会有什么后果呢?

    delete from dept where deptno = 1;

      我们发现除了dept中的一条数据被删除了,emp中两条数据也被删除了,其中emp中的两条数据是参照了销售部的这条数据的,这就很轻易理解on delete cascade了。

      接下来我们再来看on delete set null,顾名思义了,这种方式建立的外键约束,当被参照的数据被删除是,参照该数据的那些数据的对应值将会变为空值,下面我们还是通过试验来证实on delete set null作用:

      首先恢复刚才的那几条数据,然后更改约束:

    alter table emp
    add constraint fk_emp_dept foreign key(dept) references dept(deptno) on delete set null;

      然后我们在执行删除操作:

    delete from dept where deptno = 1;

      你也会发现除了dept中的销售部被删除以外,emp中参照这条数据的两条数据的dept的值被自动赋空了,这就是on delete set null的作用了。

      使用on delete set null有一点需要注重的是,被参参照其他表的那一列必须能够被赋空,不能有not null约束,对于上面的例子来说是emp中dept列一定不能有not null约束,假如已经定义了not null约束,又使用了on delete set null来删除被参照的数据时,将会发生:ORA-01407: 无法更新 (”DD”.”EMP”.”DEPT”) 为 NULL的错误。

      总的来讲on delete cascade和on delete set null的作用是用来处理级联删除问题的,假如你需要删除的数据被其他数据所参照,那么你应该决定到底希望oracle怎么处理那些参照这些即将要删除数据的数据的,你可以有三种方式:

      禁止删除。这也是Oracle默认的

      将那些参照本值的数据的对应列赋空,这个需要使用on delete set null要害字

      将那些参照本值的数据一并删除,这个需要使用on delete cascade要害字
    展开全文
  • Oracle 添加外键 一点一点积累

    千次阅读 2009-08-18 18:15:00
    Oracle 添加外键------------------------------摘抄-----------------------------------------创建外键约束时假如使用Oracle默认的创建方式,在删除被参照的数据时,将无法被删除,这一点在Oracle9i中给了我们更多...

    Oracle 添加外键

    ------------------------------摘抄-----------------------------------------

    创建外键约束时假如使用Oracle默认的创建方式,在删除被参照的数据时,将无法被删除,这一点在Oracle9i中给了我们更多灵活的选择,我们可是使用on delete cascade和 on delete set null要害字来决定删除被参照数据时是否要将参照这个数据的那些数据一并删除,还是将那些参照这条数据的数据的对应值赋空。

      例如下面这两个表中分别存的时员工的基本信息和公司的部门信息。我们为

    create table dept
    (deptno number(10) not null,
    deptname varchar2(30) not null,
    constraint pk_dept primary key(deptno));

    create table emp
    ( empno number(10) not null,
    fname varchar2(20) ,
    lname varchar2(20) ,
    dept number(10) ,
    constraint pk_emp primary key(empno));

      然后我们现在分别使用这两个要害字来增加外键试一下,首先我们来试一下on delete cascade

    alter table emp
    add constraint fk_emp_dept foreign key(dept) references dept(deptno) on delete cascade;

      先增加外键。然后插入数据。

    insert into dept values(1,’销售部’);
    insert into dept values(2,’财务部’);
    insert into emp values (2,’Mary’,'Song’,1);
    insert into emp values (3,’Linda’,'Liu’,2);
    insert into emp values (4,’Linlin’,'Zhang’,1);

      然后现在我要删除销售部,会有什么后果呢?

    delete from dept where deptno = 1;

      我们发现除了dept中的一条数据被删除了,emp中两条数据也被删除了,其中emp中的两条数据是参照了销售部的这条数据的,这就很轻易理解on delete cascade了。

      接下来我们再来看on delete set null,顾名思义了,这种方式建立的外键约束,当被参照的数据被删除是,参照该数据的那些数据的对应值将会变为空值,下面我们还是通过试验来证实on delete set null作用:

      首先恢复刚才的那几条数据,然后更改约束:

    alter table emp
    add constraint fk_emp_dept foreign key(dept) references dept(deptno) on delete set null;

      然后我们在执行删除操作:

    delete from dept where deptno = 1;

      你也会发现除了dept中的销售部被删除以外,emp中参照这条数据的两条数据的dept的值被自动赋空了,这就是on delete set null的作用了。

      使用on delete set null有一点需要注重的是,被参参照其他表的那一列必须能够被赋空,不能有not null约束,对于上面的例子来说是emp中dept列一定不能有not null约束,假如已经定义了not null约束,又使用了on delete set null来删除被参照的数据时,将会发生:ORA-01407: 无法更新 (”DD”.”EMP”.”DEPT”) 为 NULL的错误。

      总的来讲on delete cascade和on delete set null的作用是用来处理级联删除问题的,假如你需要删除的数据被其他数据所参照,那么你应该决定到底希望oracle怎么处理那些参照这些即将要删除数据的数据的,你可以有三种方式:

      禁止删除。这也是Oracle默认的

      将那些参照本值的数据的对应列赋空,这个需要使用on delete set null要害字

      将那些参照本值的数据一并删除,这个需要使用on delete cascade要害字

    展开全文
  • Oracle 创建外键约束使用 on delete cascade 或者 on delete set null 选项 如果我们创建外键约束时候使用了默认的方式,在删除被参照(主表)的数据时候,无法删除,报如下错误: SQL> delete ...

     

    如果我们创建外键约束时候使用了默认的方式,在删除被参照(主表)的数据时候,无法删除,报如下错误:

    SQL> delete from dept where deptno=1;
    delete from dept where deptno=1
    *
    第 1 行出现错误:
    ORA-02292: 违反完整约束条件 (HBC.FK_EMP_DEPT) - 已找到子记录

    所以在创建外键的时候,可以选择 on delete cascade和 on delete set null关键字来决定删除被参照数据时是否要将参照这个数据的那些数据(子表)一并删除,还是将那些参照这条数据的数据的对应值赋空。

    create table dept (  

     deptno number(10) not null,  

     deptname varchar2(30) not null,  

     constraint pk_dept primary key(deptno)

    );

    create table emp (

     empno number(10) not null,  

     fname varchar2(20) ,  

     lname varchar2(20) ,  

     dept number(10) ,  

     constraint pk_emp primary key(empno)

    );

    alter table emp add constraint fk_emp_dept foreign key(dept) references dept(deptno) on delete cascade;

    insert into dept values (1,'A');

    insert into dept values (2,'B');

    insert into emp values (1,'zhang','san',2);

    insert into emp values (2,'li','si',2);

    insert into emp values (3,'wang','wu',1);

    delete from dept where deptno = 1;
    delete from dept where deptno = 1;
    我们发现除了dept中的一条数据被删除了,emp中两条数据也被删除了,其中emp中的两条数据是参照了销售部的这条数据的,这就很容易理解on delete cascade了。
    接下来我们再来看on delete set null,顾名思义了,这种方式建立的外键约束,当被参照的数据被删除是,参照该数据的那些数据的对应值将会变为空值,下面我们还是通过试验来证明on delete set null作用:
    首先恢复刚才的那几条数据,然后更改约束:
    alter table emp
    add constraint fk_emp_dept foreign key(dept) references dept(deptno) on delete set null;
    然后我们在执行删除操作:
    delete from dept where deptno = 1;
    你也会发现除了dept中的销售部被删除以外,emp中参照这条数据的两条数据的dept的值被自动赋空了,这就是on delete set null的作用了。
    使用on delete set null有一点需要注意的是,被参参照其他表的那一列必须能够被赋空,不能有not null约束,对于上面的例子来说是emp中dept列一定不能有not null约束,如果已经定义了not null约束,又使用了on delete set null来删除被参照的数据时,将会发生:ORA-01407: 无法更新 (”DD”.”EMP”.”DEPT”) 为 NULL的错误。
    总的来讲on delete cascade和on delete set null的作用是用来处理级联删除问题的,如果你需要删除的数据被其他数据所参照,那么你应该决定到底希望oracle怎么处理那些参照这些即将要删除数据的数据的,你可以有三种方式:
    禁止删除。这也是oracle默认的
    将那些参照本值的数据的对应列赋空,这个需要使用on delete set null关键字
    将那些参照本值的数据一并删除,这个需要使用on delete cascade关键字

     

     

     

     

    posted on 2013-04-05 22:53  傻春 阅读( ...) 评论( ...) 编辑 收藏

    转载于:https://www.cnblogs.com/hechun/archive/2013/04/05/3001716.html

    展开全文
  • 前面我们介绍了创建外键约束时如果使用oracle默认的创建方式,在删除被参照的数据时,将无法被删除,这一点在oracle9i中给了我们更多灵活的选择,我们可是使用on delete cascade和 on delete set null关键字来决定...
  • 创建外键约束时假如使用Oracle默认的创建方式,在删除被参照的数据时,将无法被删除,这一点在Oracle9i中给了我们更多灵活的选择,我们可是使用on delete cascade和 on delete set null要害字来决定删除...
  • Oracle外键约束

    千次阅读 2019-07-14 20:30:26
    一、创建外键约束 两种方法 1.创建表时 create table 子表( id number, name varchar2(5), foreign key(id) references 父表(列名) ); 2.随时更改 alter table 子表 drop constraint 约束名; alter table ...
  • Oracle外键级联删除和级联更新

    千次阅读 2015-07-11 19:14:04
    Oracle外键的删除上有NO ACTION(类似RESTRICT)、CASCADE和SET NULL三种行为。 下面以学生-班级为例说明不同情况下的外键删除,学生属于班级,班级的主键是学生的外键。 -- 班级表 CRATE TABLE TB_CLASS ( ID ...
  • Oracle 外键查询和操作

    2015-04-16 10:22:39
    临时禁止外键: alter table EMP modify constraint FK_DEPTNO disable; 查询依赖某个表上主键的所有外键: select * from user_constraints t where t.constraint_type = 'R' and t.r_constraint_name ...
  • 禁止外键:declare cursor c_constraints is select * from user_constraints; r_constrains user_constraints%rowtype; sql_str varchar2(100); begin open c_constraints; loop fetch c_constraint
  • oracle主键和外键

    2012-07-25 17:14:39
    --不允许删除主表中被引用的数据,该操作会被禁止。  如果有on delete cascade,而且没有在子表上加索引:那么每删除主表中的一行  都会对子表做一个全表扫描。而且如果从父表删除多行,那么每从父表中删除...
  • --不允许删除主表中被引用的数据,该操作会被禁止。 如果有on delete cascade,而且没有在子表上加索引:那么每删除主表中的一行 都会对子表做一个全表扫描。而且如果从父表删除多行,那么每从父表中删除一行 就要...
  • 经常我们在删除DB记录时,会为外键关联而无法删除数据感到苦恼。这里个人经常用到的一个方法就是,先让关联主键失效,然后再删除数据,数据删除完成后,再让其主 键生效,这样很好的解决了删除级联数据难的问题。第...
  • 临时禁用表外键约束: --临时禁用表外键约束: declare v_sql varchar2(1000); v_table_name varchar2(1000); v_ref sys_refcursor; begin for v_ref in ( --查询出表的主外键信息和表名等字段 Select a....
  • 执行以下sql可以生成禁止、启用、删除约束脚本,然后执行即可: 禁用所有外键约束 [sql] view plaincopy select 'alter table '||table_name||' disable constraint '||...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,163
精华内容 2,465
关键字:

oracle禁止外键