Wydaje się, że nie da się tego wszystkiego zrobić w spuście. Według dokumentacji :
Wewnątrz przechowywanej funkcji lub wyzwalacza nie wolno modyfikować tabeli, która jest już używana (do odczytu lub zapisu) przez instrukcję, która wywołała funkcję lub wyzwalacz.
Według ta odpowiedź , wydaje się, że powinieneś:
utwórz procedurę składowaną, która wstawia/aktualizuje tabelę docelową, a następnie aktualizuje inne wiersze, wszystkie w transakcji.
Za pomocą przechowywanego procesu ręcznie zatwierdzisz zmiany (wstaw i zaktualizuj). Nie zrobiłem tego w MySQL, ale ten post wygląda na dobry przykład.