To je to, co je známé jako problém "Mutating Table". Jde o to, že spouštěč řádku nemá povolen přístup k jiným řádkům ve stejné tabulce, protože neexistuje žádná záruka, že řádky budou aktualizovány mimo jiné v určitém pořadí.
Za prvé, opravdu byste se neměli pokoušet ukládat total_income, když si jej můžete v případě potřeby snadno vypočítat. To znamená, že si myslím, že můžete dělat, co chcete, tím, že uděláte něco jako
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;
Cílem je upravit student.total_income
vzhledem k jeho předchozí hodnotě, protože můžete odkazovat pouze na family.income
vzhledem k jeho předchozí hodnotě.