我有一张名为:
的表Home
HomeID, HomeAddress, Capacity.
另一个叫:
Children
ChildID, HomeID,Childname.
有没有一种方法可以自动更新每个Home表容量列,其中包含在Children表中作为外键链接的子项数量?
答案 0 :(得分:0)
你必须使用2个触发器才能实现。
示例1 : 更新后 :
delimiter //
drop trigger if exists au_on_children //
create trigger au_on_children after update on children
for each row
begin
declare old_totalCapacity int not null default 0;
declare new_totalCapacity int not null default 0;
select
case when homeID = OLD.homeID
then sum( OLD.homeID )
else sum( homeID )
end
into old_totalCapacity ,
case when homeID = NEW.homeID
then sum( NEW.homeID )
else sum( homeID )
end
into new_totalCapacity
from children;
update home
set capacity =
case when homeID = OLD.homeID
then old_totalCapacity
else capacity
end ,
case when homeID = NEW.homeID
then new_totalCapacity
else capacity
end ;
end;
//
delimiter ;
示例1 : 删除后 :
delimiter //
drop trigger if exists ad_on_children //
create trigger ad_on_children after delete on children
for each row
begin
declare totalCapacity int not null default 0;
select sum( homeID )
into totalCapacity
from children
where homeID = OLD.homeID;
update home
set capacity = totalCapacity
where homeId = OLD.homeID;
end;
//
delimiter ;