sql >> Base de Datos >  >> RDS >> Mysql

Disparadores de MySQL y SUM()

Esto es lo que se conoce como el problema de la "tabla mutante". Todo se reduce a que un activador de fila no puede acceder a otras filas en la misma tabla porque no hay garantía de que las filas se actualicen en un orden específico, entre otras cosas.

En primer lugar, no debería tratar de almacenar ingresos totales cuando puede calcularlos fácilmente cuando sea necesario. Dicho esto, creo que puedes hacer lo que quieras haciendo algo como

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;

La idea es modificar student.total_income en relación con su valor anterior, ya que solo puede hacer referencia a family.income en relación con su valor anterior.