Da uno script di shell, come posso verificare se esiste una tabella nel database MySQL?


8

Sto cercando di scrivere uno script che consenta a un utente di selezionare la manipolazione che deve fare su un tavolo. Voglio verificare se la tabella esiste o no. Se esiste, continuerò le altre cose, altrimenti esco dicendo che la tabella non esiste. Come potrei raggiungere questo obiettivo.

Risposte:


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 per saltare i nomi delle colonne
  • -s per uscita non tabulare

2
Per fare in modo che lo script acceda a MySQL senza arrestarsi e richiedere una password, è possibile creare un .my.cnffile nella directory principale e aggiungere un [client]blocco contenente password="my_password". Dai un'occhiata alla sezione sui file delle opzioni utente nel manuale.
Ladadadada,

4

In MySQL puoi usare -e dalla shell

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

3

Se desideri un metodo che non prevede l'esecuzione di un client mysql e l'accesso al server mysql, puoi farlo:

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

Dovrai sostituire il percorso della directory dei dati, il nome del database e il nome della tabella nella prima riga.

Avvertenze:

  1. Questo non funzionerà se si utilizza InnoDB e non si utilizza il file innodb per tabella. cioè lo script può dire che la tabella non esiste anche se esiste.
  2. È possibile che quel file esista per vari motivi tra cui la copia di tabelle in giro usando il filesystem o passando da MyISAM a InnoDB. cioè lo script può dire che la tabella esiste anche se non lo è.

Non è affidabile come gli altri metodi già presentati a causa dei motivi sopra riportati, ma evita il client mysql, quindi potrebbe comunque valerne la pena.

Si noti che tutti i metodi qui presentati si basano sul fatto che si ottengano le proprie autorizzazioni (filesystem o MySQL) corrette. Se sbagli, molto probabilmente otterrai un falso negativo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.