Services WEB en Midi Pyrénées
Partenaire informatique des PME et PMI. Tél. : 06 20 29 33 00.

Supprimer toutes les tables d’une base MariaDB (ou MySQL)

Il peut parfois être utile de pouvoir, en une seule ligne de commande, supprimer toutes les tables d’une base.

Les commandes « exemple » sont saisies dans une console ssh, connecté en tant que root.

Complémentairement, j’ai un fichier .my.cnf correctement renseigné qui m’évite de ressaisir le login et le mot de passe de root à chaque fois. Si ce n’est pas le cas, ajoutez simplement comme premières options -u root -p (-u pour spécifier l’utilisateur et -p pour qu’il demande le mot de passe)

Lister toutes les bases

mysql -e "show databases;"

Lister toutes les tables d’une base

mysql nom_de_la_base -e "show tables;"

Lister toutes les tables d’une base et les supprimer (mode test)

mysql nom_de_la_base -e "show tables;" | gawk 'NR>1 {print "set foreign_key_checks=0;drop table nom_de_la_base."$1";"}'
Une petite explication ?

  • On réinjecte chaque ligne en sortie de la première commande dans awk.
    • J’utilise ici gawk, plus par routine qu’autre chose. La version GNU de awk n’apporte rien ici.
  • NR>1 on élimine la ligne de titre « Tables in nom_de_la_base ». Non seulement ça ne sert à rien, mais ça va faire « planter » notre commande
  • Dans l’accolade de traitement principale, on lui demande :
    • De ne pas vérifier les clés étrangères : « efface et tais toi ! »
    • D’effacer la table : $1 contiendra le nom de la table

Cette commande ne fait rien : tout le résultat s’affiche sur stdout, c’est à dire sur votre écran. Pour réellement effacer, il faut rediriger ce flux à nouveau vers mysql

Lister toutes les tables d’une base et les supprimer (mode réel)

mysql nom_de_la_base -e "show tables;" | gawk 'NR>1 {print "set_foreign_key_checks=0;drop table nom_de_la_base."$1";"}' |mysql

Lister toutes les tables d’une base ayant un préfixe particulier et les supprimer (mode réel)

mysql nom_de_la_base -e "show tables;" | gawk '/^prefixe_tables/ {print "set_foreign_key_checks=0;drop table nom_de_la_base."$1";"}'

On utilise ici la capacité de awk à employer les expressions régulières : « toute ligne commençant par »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

19 − douze =