Parece que você não pode fazer tudo isso em um gatilho. De acordo com a documentação :
Dentro de uma função ou gatilho armazenado, não é permitido modificar uma tabela que já está sendo usada (para leitura ou escrita) pela instrução que invocou a função ou gatilho.
De acordo com esta resposta , parece que você deve:
crie um procedimento armazenado, que insira/atualize a tabela de destino e, em seguida, atualize as outras linhas, todas em uma transação.
Com um proc armazenado, você confirmará manualmente as alterações (inserir e atualizar). Eu não fiz isso no MySQL, mas este post parece um bom exemplo.