sql >> データベース >  >> RDS >> Mysql

子テーブル数に基づいて親列を更新するトリガー

    これを実現するには、2つのトリガーを使用する必要があります。

    1. 子供に関する更新後
    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 ;
    



    1. データベース全体の空の文字列をNULLに更新

    2. MySQLQUERYLIKEは何も返しません

    3. OracleのFORUPDATEWAIT10構文を生成するために休止状態を取得するにはどうすればよいですか。

    4. MicrosoftAccessの将来について楽観的である理由