Supprimer toutes les tables d'une base MySQL sous Windows

Classé dans : Bases de données | Aucun commentaire

mercredi 10 novembre 2010

Sur le serveur MySQL, il n'existe pas de commandes pour supprimer d'un coup toutes les tables d'une base de données.

On peut soit les supprimer une par une, soit supprimer puis recréer la base, au risque de perdre des infos tels que les droits d'accès.

Voici donc une méthode simple pour supprimer d'un coup toutes les tables d'une base de données MySQL.

1. Prérequis

il faut préalablement récupérer les UnxUtils. Ce sont des utilitaires usuels Linux qui ont été portés sur Windows (sed, grep,...)

Il suffit de les télécharger ici et de les décompresser dans le dossier de votre choix :

http://sourceforge.net/projects/unxutils/

2. Le script de suppression

Notre script de suppression sera un simple fichier .bat dont voici le code :

REM Définition des variables
set UnixUtilsPath=C:\Applis\UnxUtils\usr\local\wbin
set MySQLPath=C:\Program Files\MySQL\MySQL Server 5.1\bin
set dbname=<votre base de donnees>
set usr=<utilisateur mysql avec des droits suffisants pour supprimer des tables>
set pwd=<le mot de passe associé à cet utilisateur>

REM Suppression des tables
"%MySQLPath%\mysql" -u%usr% -p%pwd% %dbname% -e "show tables" | "%UnixUtilsPath%\grep" -v Tables_in | "%UnixUtilsPath%\gawk" "{print \"drop table \" $1 \";\"}" | "%MySQLPath%\mysql" -u%usr% -p%pwd% %dbname%

Et c'est  tout ? Hé bien oui ! :o)

En fait le script extrait le nom des tables issus d'une commande SHOW TABLES et regénère les commandes DROP TABLE correspondantes, le tout en une seule ligne.

Ce script travaille en local, mais si on veut l'exécuter à distance, il suffit de rajouter à la commande mysql les paramètres adéquate (--host=..., --port=...)