我正在嘗試編寫一個腳本,允許使用者選擇他需要在表上執行的操作。我想檢查該表是否存在。如果它存在,我將繼續其他事情,否則我退出說表不存在。我怎樣才能實現這個目標。
答案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
您必須替換第一行中的資料目錄路徑、資料庫名稱和表格名稱。
注意事項:
- 如果您使用 InnoDB 並且是不是使用 innodb-file-per-table。即該腳本可以說該表不存在,即使它存在。
- 該文件的存在可能有多種原因,包括使用檔案系統複製表或從 MyISAM 切換到 InnoDB。即該腳本可以說該表確實存在,即使它不存在。
由於上述原因,它不如已經提出的其他方法可靠,但它避免了 mysql 客戶端,因此它可能仍然值得。
請注意,此處介紹的所有方法都依賴您正確取得自己的權限(檔案系統或 MySQL)。如果你弄錯了,你很可能會得到假陰性。