当前位置: 代码迷 >> Oracle技术 >> 100分~类似数据库外键的一个有关问题
  详细解决方案

100分~类似数据库外键的一个有关问题

热度:317   发布时间:2016-04-24 08:05:56.0
100分~~类似数据库外键的一个问题,紧急求助
表的结构大概如下
user_id    parent_id    name
1                    0                 lilei
2                    1                 lili
3                    1                 like

主键时user_id,每一条记录都有一个parent_id,表示user之间的父子关系,如上,lilei是lili和like的父。
现在的要求是,当删除lilei这条记录时,lili和like的parent_id自动置为0。

用UPDATE的问题是,如果lilei下有1百万个孩子,那么UPDATE就不行了,一来会慢,二来where条件没法写。

现在想法是数据库自动完成,类似级联操作。

怎么办,还是我的表设计的不合理。
------解决思路----------------------
用TRIGGER吧。。
------解决思路----------------------
create or replace trigger tri_update_bb
after delete on bb
for each row
declare
  v_parent_id number:=:old.user_id;
begin
   update GANGMA.bb set parent_id=0 where parent_id=v_parent_id;
end;
------解决思路----------------------
上面的回答验证了下有点问题,修改了下,基本上可以满足要求了:
create or replace trigger tri_update_bb
after delete on bb
for each row
declare
  PRAGMA AUTONOMOUS_TRANSACTION;
begin
   update GANGMA.bb set parent_id=0 where parent_id=:old.user_id;
   commit;
end;
  相关解决方案