Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Uruchom, aby zaktualizować kolumnę nadrzędną na podstawie liczby tabel podrzędnych

Aby to osiągnąć, musisz użyć 2 wyzwalaczy.

  1. po aktualizacji na dzieciach
  2. po usunięciu na dzieciach

Przykład 1 :Po AKTUALIZACJI :

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 ;

Przykład 1 :Po USUNIĘCIU :

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Filtruj puste lub puste dane wejściowe za pomocą LOAD DATA INFILE w MySQL

  2. Dlaczego moja procedura składowana zgłasza błąd „Brak danych — pobrano, wybrano lub przetworzono zero wierszy”, gdy w instrukcji znajduje się WHERE?

  3. mysql Odmowa dostępu użytkownika ''@'localhost' do bazy danych ''

  4. Wybierz użytkownika posiadającego kwalifikujące się dane w wielu wierszach w tabeli wp_usermeta

  5. MySQL - domyślna wartość dla TIMESTAMP(3)