Mysql
 sql >> Base de données >  >> RDS >> Mysql

Déclencheurs MySQL et SUM()

C'est ce qu'on appelle le problème de la "table de mutation". Cela revient à dire qu'un déclencheur de ligne n'est pas autorisé à accéder à d'autres lignes dans la même table car il n'y a aucune garantie que les lignes seront mises à jour dans un ordre spécifique, entre autres choses.

Tout d'abord, vous ne devriez vraiment pas essayer de stocker revenu_total alors que vous pouvez le calculer facilement en cas de besoin. Cela dit, je pense que vous pouvez faire ce que vous voulez en faisant quelque chose comme

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'idée est de modifier student.total_income par rapport à sa valeur précédente, puisque vous ne pouvez référencer que family.income par rapport à sa valeur précédente.