在做两个表的删除,A表主键是B表的外键。然后要根据A表一个非主键字段来删除数据"C",所以想请教下高手,直接delete from A where C="**" 这样可以做到达到效果?

解决方案 »

  1.   

    在你B表上建立级联删除
    alter table b
    add constraint fk_b foreign key(bid) references a(aid) on delete cascade;
      

  2.   


    -- 你是要:外键里面的相关数据也删除?
    -- 可以分两步走:
    -- (1) 删除从表数据:(假设表a与表b的相关主外键名相同,均为:pkid,)
    delete from b 
    where pkid in ( select a.pkid from a where c='xxx' );-- (2) 删除主表数据:
    delete from a
    where c='xxx';
      

  3.   

    我试了一下alter table b
    add constraint fk_b foreign key(bid) references a(aid) on delete cascade;
    这个不能进行级联删除啊,是不是我操作错了
      

  4.   


    举个例子:
    1、创建两个表中分别存的时员工的基本信息和公司的部门信息。
    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));2、增加外键on delete cascade:
    alter table emp
    add constraint fk_emp_dept foreign key(dept) references dept(deptno) on delete cascade;3、先增加外键。然后插入数据。
    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);4、然后现在我要删除销售部(注意看结果!)
    delete from dept where deptno = 1;
    发现除了dept中的一条数据被删除了,emp中两条数据也被删除了,其中emp中的两条数据是参照了销售部的这条数据的,这就是on delete cascade。