Outra abordagem hacky que acabei de tentar com sucesso é obter a tabela de criação DDL através do comando específico do mysql
SHOW CREATE TABLE `tableName`
Em seguida, faça alguma mágica regexp e crie uma nova consulta DDL que criará uma tabela temporária baseada na tabela original, com todas as alterações de alteração de tabela incorporadas à tabela de criação.
No meu projeto baseado em PHP, fiz o seguinte para adicionar um índice exclusivo a uma tabela temporária. Ele fez o truque e não ocorreu mais commit implícito no meio da transação.
$createDDL = ... get from SHOW CREATE TABLE `tableName`
$nr = 0;
$createDDL = preg_replace("/CREATE TABLE `$tableName` \(/", "CREATE TEMPORARY TABLE `$tmpName` (\nUNIQUE `ukey-1` ($uniqCols),", $createDDL, -1, $nr);
if (!$nr)
throw new Exception("CREATE TABLE replacement error. No reps made.");
mysqli_query($con, $createDDL);
EDITAR A propósito, aqui estão alguns relatórios de bugs (recursos) (desde muitos anos). No primeiro você pode ver uma resposta (datada de 2006) que afirma:como esse comportamento é o mesmo do oracle db, esse é o consistente ...
Talvez uma solicitação de recurso "campanha de spam" deva ser iniciada para que essa solicitação de recurso seja reativada!