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

MySQL-triggere og SUM()

Dette er det, der er kendt som "mutationstabel"-problemet. Hvad det bunder i er, at en rækkeudløser ikke får adgang til andre rækker i samme tabel, fordi der ikke er nogen garanti for, at rækker blandt andet vil blive opdateret i en bestemt rækkefølge.

For det første burde du virkelig ikke forsøge at gemme total_income, når du nemt kan beregne det, når det er nødvendigt. Når det er sagt, tror jeg, du kan gøre, hvad du vil, ved at gøre sådan noget som

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;

Ideen er at ændre student.total_income i forhold til dens tidligere værdi, da du kun kan referere til family.income i forhold til dens tidligere værdi.



  1. jsonb vs jsonb[] for flere adresser til en kunde

  2. Dynamisk SQL resulterer i midlertidig tabel i SQL Stored procedure

  3. Sådan deaktiveres alle tjekbegrænsninger i SQL Server-databasen - SQL Server / TSQL vejledning del 87

  4. SQL LIKE % inde i array