日期:2014-05-18  浏览次数:20476 次

更新关系表的信息
有A,B,C三张表.
A是分类信息的主体表,B是分类下具体信息的主体表.
C是关联A,B之间信息的关联表.A与B的信息是一对多的关系.

create table category
(
  cid int primary key,
  cname varchar(50)
);

create table item
(
  itmid int primary key,
  iname varchar(50)
);

create table relation
(
  cid int not null,
  itmid int not null
);

假如修改了某个分类下属的所有item关系.假设cid=776,分类包含的新itmid (1,2,3,4,5)
方法一:
delete from relation where cid = 776
insert into relation values(776,1);
...
insert into relation values(776,5);
方法二:
delete from relation where cid = 776 and itmid not in (1,2,3,4,5);
--先在item表获取所有新的item关系id,然后再剔除relation中cid=776已经存在的相同信息,最后把需要添加的信息加入数据库.
insert into relation 
select 776,itmid from (select itmid from item where itmid in (1,2,3,4,5))
where itmid not in (select itmid from relation where itmid in (1,2,3,4,5));

两种做法都可以实现相同的数据结果,刚开始想用第一种办法更新数据.因为本身每个分类所包含的关联信息并不多.
但是全部删除再逐个添加,总有种脱了裤子放P的感觉.
而选择第二种办法,并不太清楚负载是不是比第一种方法大
所以想请问大家,哪种发放更符合规矩又或者有更有效的办法.最好说说理由.谢谢大家.




------解决方案--------------------
1、可以设置主外键关系,使用级联更新
2、使用触发器来完成