Dari skrip shell, bagaimana saya bisa mengecek apakah tabel dalam database MySQL ada atau tidak?


8

Saya mencoba menulis skrip yang memungkinkan pengguna untuk memilih manipulasi apa yang perlu dia lakukan di atas meja. Saya ingin memeriksa apakah tabelnya ada atau tidak. Jika ada saya akan melanjutkan hal-hal lain atau saya keluar mengatakan meja tidak ada. Bagaimana saya bisa mencapai ini.

Jawaban:


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 untuk melewati nama kolom
  • -s untuk output nontabular

2
Agar skrip Anda masuk ke MySQL tanpa berhenti dan meminta kata sandi, Anda dapat membuat .my.cnffile di direktori home Anda dan menambahkan [client]blok yang berisi password="my_password". Lihat bagian pada file opsi pengguna dalam manual.
Ladadadada

4

Di MySQL Anda dapat menggunakan -e dari shell

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

3

Jika Anda menginginkan metode yang tidak melibatkan menjalankan klien mysql dan masuk ke server mysql, Anda dapat melakukan ini:

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

Anda harus mengganti jalur ke direktori data Anda, nama database Anda dan nama tabel Anda di baris pertama.

Peringatan:

  1. Ini tidak akan berfungsi jika Anda menggunakan InnoDB dan tidak menggunakan innodb-file-per-table. skrip dapat mengatakan bahwa tabel tidak ada meskipun itu ada.
  2. Ada kemungkinan file itu ada karena berbagai alasan termasuk menyalin tabel menggunakan sistem file atau beralih dari MyISAM ke InnoDB. yaitu skrip dapat mengatakan bahwa tabel memang ada meskipun tidak.

Ini tidak dapat diandalkan seperti metode lain yang disajikan sudah karena alasan di atas tetapi menghindari klien mysql sehingga mungkin masih bermanfaat.

Perhatikan bahwa semua metode yang disajikan di sini mengandalkan Anda untuk mendapatkan izin Anda sendiri (sistem file atau MySQL) yang benar. Jika Anda salah, kemungkinan besar Anda akan mendapatkan negatif palsu.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.