Acredito que a resposta para isso seja abordada no MySQL documentos :
Se uma tabela contém um
AUTO_INCREMENT coluna e INSERT ... UPDATE insere uma linha, o LAST_INSERT_ID() função retorna o AUTO_INCREMENT valor. Se a instrução atualizar uma linha, LAST_INSERT_ID() não é significativo. No entanto, você pode contornar isso usando LAST_INSERT_ID(expr) . Suponha que o id seja o AUTO_INCREMENT coluna. Para fazer LAST_INSERT_ID() significativo para atualizações, insira linhas da seguinte forma:INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;