Przechowywana funkcja lub wyzwalacz nie może modyfikować tabeli, która jest już używana (do odczytu lub zapisu) przez instrukcję, która wywołała funkcję lub wyzwalacz.
od:Ograniczenia programów przechowywanych .
Generalnie w przypadku wyzwalacza, który jest uruchamiany podczas wstawiania, jeśli chcesz zmienić wstawianą wartość, należy wykonać wyzwalacz typu BEFORE INSERT
i zmień wartości w NEW
zauważyłem również, że poniższe stwierdzenie i tak nie jest tym, czego chcesz.
update pos_table set PTS=((NEW.won_games*2)+(NEW.tie_games*1));
Aktualizuje całą tabelę, podczas gdy myślę, że próbujesz zaktualizować tylko określony wiersz. W każdym razie jest to proste obliczenie, więc tak naprawdę nie musisz przechowywać tej kolumny. Możesz równie łatwo obliczyć wartość w czasie wyświetlania i znacznie uprościć swój kod + uniknąć problemu z wyzwalaczem.