表的结构大概如下
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;