Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Gatilhos do MySQL e SUM()


Isso é o que é conhecido como o problema da "Tabela Mutante". O que se resume é que um gatilho de linha não tem permissão para acessar outras linhas na mesma tabela porque não há garantia de que as linhas serão atualizadas em uma ordem específica, entre outras coisas.

Em primeiro lugar, você realmente não deveria estar tentando armazenar total_income quando pode calculá-lo facilmente quando necessário. Dito isso, acho que você pode fazer o que quiser fazendo 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;

A ideia é modificar student.total_income em relação ao seu valor anterior, já que você só pode referenciar family.income em relação ao seu valor anterior.