触发根据子表计数更新父列

时间:2014-04-12 20:44:45

标签: mysql

我有一张名为:

的表
Home

HomeID, HomeAddress, Capacity.

另一个叫:

Children

ChildID, HomeID,Childname.

有没有一种方法可以自动更新每个Home表容量列,其中包含在Children表中作为外键链接的子项数量?

1 个答案:

答案 0 :(得分:0)

你必须使用2个触发器才能实现。

  1. 更新儿童后
  2. 删除儿童后
  3. 示例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 ;