Mysql
 sql >> Database >  >> RDS >> Mysql

Trigger MySQL e SUM()

Questo è ciò che è noto come il problema della "tabella mutante". Ciò a cui si riduce è che un attivatore di riga non può accedere ad altre righe nella stessa tabella perché non vi è alcuna garanzia che le righe vengano aggiornate in un ordine specifico, tra le altre cose.

Prima di tutto, non dovresti davvero cercare di memorizzare total_income quando puoi calcolarlo facilmente quando necessario. Detto questo, penso che tu possa fare quello che vuoi facendo qualcosa come

CREATE TRIGGER family_income_update
  AFTER UPDATE ON family
  FOR EACH ROW 
BEGIN
  UPDATE student
    SET total_income = total_income + (NEW.income - OLD.income)
    WHERE student.id_student = NEW.id_student;
END;

L'idea è di modificare student.total_income rispetto al suo valore precedente, poiché puoi fare riferimento solo a family.income rispetto al suo valore precedente.