Parece que no puedes hacer todo esto en un gatillo. Según la documentación :
Dentro de una función o disparador almacenado, no se permite modificar una tabla que ya está siendo utilizada (para lectura o escritura) por la instrucción que invocó la función o disparador.
Según esta respuesta , parece que deberías:
cree un procedimiento almacenado, que inserte/actualice la tabla de destino, luego actualice las otras filas, todo en una transacción.
Con un proceso almacenado, confirmará manualmente los cambios (insertar y actualizar). No he hecho esto en MySQL, pero esta publicación parece un buen ejemplo.