これは「ミューティングテーブル」問題として知られているものです。つまり、行が特定の順序で更新される保証はないため、行トリガーは同じテーブル内の他の行にアクセスできません。
まず、必要なときに簡単に計算できる場合は、total_incomeを保存しようとしてはいけません。そうは言っても、次のようなことをすることで、やりたいことができると思います
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;
アイデアは、student.total_income
を変更することです family.income
しか参照できないため、以前の値と比較して 以前の値と比較して。