Une autre approche hacky que je viens d'essayer avec succès consiste à obtenir le DDL de création de table via la commande spécifique mysql
SHOW CREATE TABLE `tableName`
Ensuite, faites de la magie d'expression régulière et créez une nouvelle requête DDL qui créera une table temporaire basée sur la table d'origine, avec toutes les modifications de la table alter incorporées dans la table de création.
Dans mon projet basé sur PHP, j'ai fait ce qui suit pour ajouter un index unique à une table temporaire. Cela a fait l'affaire et plus aucun commit implicite ne s'est produit au milieu de la transaction.
$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);
MODIFIER Au fait, voici quelques rapports de bogues (fonctionnalités) (depuis de nombreuses années). Dans le premier, vous pouvez voir une réponse (datant de 2006) qui indique :puisque ce comportement est le même que dans oracle db, c'est celui qui est cohérent...
Peut-être qu'une "campagne de spam" de demande de fonctionnalité devrait être lancée pour que cette demande de fonctionnalité soit réactivée !