À partir d'un script shell, comment puis-je vérifier si une table dans la base de données MySQL existe ou non?

8

J'essaie d'écrire un script qui permet à un utilisateur de sélectionner la manipulation qu'il doit faire sur une table. Je veux vérifier si la table existe ou non. S'il existe, je continuerai les autres choses ou bien je quitte en disant que la table n'existe pas. Comment pourrais-je y parvenir.

RathanKalluri
la source

Réponses:

12
if [ $(mysql -N -s -u root -p -e \
    "select count(*) from information_schema.tables where \
        table_schema='db_name' and table_name='table_name';") -eq 1 ]; then
    do something
else
    echo "table <table_name> does not exist"
    exit 1
fi
  • -N ignorer les noms de colonne
  • -s pour sortie non tabulaire
quanta
la source
2
Pour que votre script se connecte à MySQL sans s'arrêter et vous demander un mot de passe, vous pouvez créer un .my.cnffichier dans votre répertoire personnel et ajouter un [client]bloc contenant password="my_password". Jetez un œil à la section sur les fichiers d'options utilisateur dans le manuel.
Ladadadada
4

Dans MySQL, vous pouvez utiliser -e à partir du shell

mysql -e "desc main_db.clients" > /dev/null 2>&1
echo $?
Glen
la source
3

Si vous voulez une méthode qui n'implique pas l'exécution d'un client mysql et la connexion au serveur mysql, vous pouvez le faire:

if ls -l /var/lib/mysql/database/table.frm 2> /dev/null > /dev/null
then
  echo Table exists
else
  echo Table does not exist
fi

Vous devrez remplacer le chemin de votre répertoire de données, votre nom de base de données et votre nom de table dans la première ligne.

Mises en garde:

  1. Cela ne fonctionnera pas si vous utilisez InnoDB et n'utilisez pas innodb-file-per-table. ie le script peut dire que la table n'existe pas même si elle existe.
  2. Il est possible que ce fichier existe pour diverses raisons, notamment la copie de tables autour de l'utilisation du système de fichiers ou le passage de MyISAM à InnoDB. ie le script peut dire que la table existe bien qu'elle n'existe pas.

Ce n'est pas aussi fiable que les autres méthodes présentées déjà pour les raisons ci-dessus, mais cela évite le client mysql, donc cela peut encore valoir la peine.

Notez que toutes les méthodes présentées ici dépendent de l'obtention correcte de vos propres autorisations (système de fichiers ou MySQL). Si vous vous trompez, vous obtiendrez très probablement un faux négatif.

Ladadadada
la source