如何透過shell腳本檢查MySQL資料庫中的表是否存在?

如何透過shell腳本檢查MySQL資料庫中的表是否存在?

我正在嘗試編寫一個腳本,允許使用者選擇他需要在表上執行的操作。我想檢查該表是否存在。如果它存在,我將繼續其他事情,否則我退出說表不存在。我怎樣才能實現這個目標。

答案1

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跳過列名
  • -s對於非表格輸出

答案2

在 MySQL 中,您可以在 shell 中使用 -e

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

答案3

如果你想要一種不涉及運行mysql客戶端和登入mysql伺服器的方法,你可以這樣做:

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

您必須替換第一行中的資料目錄路徑、資料庫名稱和表格名稱。

注意事項:

  1. 如果您使用 InnoDB 並且是不是使用 innodb-file-per-table。即該腳本可以說該表不存在,即使它存在。
  2. 該文件的存在可能有多種原因,包括使用檔案系統複製表或從 MyISAM 切換到 InnoDB。即該腳本可以說該表確實存在,即使它不存在。

由於上述原因,它不如已經提出的其他方法可靠,但它避免了 mysql 客戶端,因此它可能仍然值得。

請注意,此處介紹的所有方法都依賴您正確取得自己的權限(檔案系統或 MySQL)。如果你弄錯了,你很可能會得到假陰性。

相關內容