106 votes

MySQL Alter syntaxe pour supprimer une colonne si elle existe

Quelle est la syntaxe pour supprimer une colonne dans une table MySQL, si cette colonne existe sur la version 4.0.18?

81voto

MattW. Points 4353

Il n'y en a pas: Demande de fonctionnalité MySQL . Il suffit de vérifier l'existence en premier dans le client ou d'attraper l'erreur.

45voto

Chase Seibert Points 7609

Cela n’est pas pris en charge au niveau de langue dans MySQL. Voici un moyen de contourner les méta-données MySQL information_schema dans la version 5.0+, mais cela ne résoudra pas votre problème dans la version 4.0.18.

 drop procedure if exists schema_change;

delimiter ';;'
create procedure schema_change() begin

    /* delete columns if they exist */
    if exists (select * from information_schema.columns where table_name = 'table1' and column_name = 'column1') then
        alter table table1 drop column `column1`;
    end if;
    if exists (select * from information_schema.columns where table_name = 'table1' and column_name = 'column2') then
        alter table table1 drop column `column2`;
    end if;

    /* add columns */
    alter table table1 add column `column1` varchar(255) NULL;
    alter table table1 add column `column2` varchar(255) NULL;

end;;

delimiter ';'
call schema_change();

drop procedure if exists schema_change;
 

J'ai écrit des informations plus détaillées dans un article de blog .

5voto

DrHyde Points 664

La réponse de Chase Seibert fonctionne, mais j'ajouterais que si vous avez plusieurs schémas, vous voulez modifier le SELECT de la manière suivante:

 select * from information_schema.columns where table_schema in (select schema()) and table_name=...
 

-3voto

ajp Points 106

Je me rends compte de ce fil est assez vieux maintenant, mais j'ai eu le même problème. C'était ma solution de base à l'aide de la base de données MySQL Workbench, mais il a bien fonctionné...

  1. obtenir un nouvel éditeur sql et exécuter AFFICHER les TABLES pour obtenir une liste de vos tables
  2. sélectionnez toutes les lignes, et choisissez copier dans le presse-papiers (sans guillemets) dans le menu contextuel
  3. coller la liste de noms dans un autre onglet de l'éditeur
  4. écrivez votre requête, c'est à dire de l'instruction ALTER TABLE x DÉPOSER a;
  5. faire quelques copier-coller, donc, vous vous retrouvez avec une requête distincte pour chaque table
  6. Choisir si le workbench devrait arrêter lorsqu'une erreur se produit
  7. Frappé d'exécuter et de regarder à travers le journal de sortie

toutes les tables qui avait la table qui n'ont pas toutes les tables qui n'ont pas l'aura montré qu'une erreur dans les logs

ensuite, vous pouvez trouver/remplacer " goutte a' modifier 'AJOUTER une COLONNE b INT NULL', etc et de les exécuter en toute chose de nouveau....

un peu maladroit, mais à la fin vous obtenez le résultat final, et vous pouvez contrôler/surveiller l'ensemble du processus et n'oubliez pas de vous sauver des scripts sql dans le cas où vous avez besoin de nouveau.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X