Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Trigger und SUM()

Dies ist das sogenannte „Mutating Table“-Problem. Es läuft darauf hinaus, dass ein Zeilentrigger nicht auf andere Zeilen in derselben Tabelle zugreifen darf, weil es unter anderem keine Garantie dafür gibt, dass Zeilen in einer bestimmten Reihenfolge aktualisiert werden.

Zunächst einmal sollten Sie wirklich nicht versuchen, total_income zu speichern, wenn Sie es bei Bedarf einfach berechnen können. Abgesehen davon denke ich, dass Sie tun können, was Sie wollen, indem Sie so etwas wie

tun
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;

Die Idee ist, student.total_income zu ändern relativ zu seinem vorherigen Wert, da Sie nur family.income referenzieren können relativ zu seinem vorherigen Wert.