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.