Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wyzwalacze MySQL i SUM()

Jest to tak zwany problem „tabeli mutacji”. Sprowadza się to do tego, że wyzwalacz wiersza nie ma dostępu do innych wierszy w tej samej tabeli, ponieważ nie ma gwarancji, że wiersze zostaną zaktualizowane między innymi w określonej kolejności.

Po pierwsze, naprawdę nie powinieneś próbować przechowywać total_income, skoro możesz go łatwo obliczyć w razie potrzeby. To powiedziawszy, myślę, że możesz robić, co chcesz, robiąc coś takiego

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;

Pomysł polega na zmodyfikowaniu student.total_income względem jego poprzedniej wartości, ponieważ możesz odwoływać się tylko do family.income względem jego poprzedniej wartości.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sprawdzasz wartość NULL w kolekcji w zapytaniach JPQL?

  2. Pokaż tylko podkategorie wordpress

  3. Pomoc dotycząca aktualizacji stronicowania PHP i MySQL

  4. szyfrowanie Mysql / przechowywanie wrażliwych danych,

  5. jak posortować kolejność LEFT JOIN w zapytaniu SQL?