簡體   English   中英

MySQL Bash 帶有變量的腳本

[英]MySQL Bash script with variables

如何在 bash 腳本中執行多個 SQL 查詢?

我讀了這兩個前幾年的帖子:

使用 shell 腳本執行多個 MySQL 命令的更好方法

如何從 shell 腳本執行 MySQL 命令?

他們帶來了一些澄清,但仍有一些我不明白的地方。

我有多個查詢要刪除有關定義了 subject_id 的主題的信息。 不幸的是,我需要運行所有這些,因為該表不在“級聯”模式下。

有沒有辦法創建一個 bash 腳本,我可以在其中使用“用戶給定”變量(我的意思是例如 [ read -p 'Subject ID' SUBJECT_ID ]),該變量將在每個內部用作 subject_id查詢? 我是否仍然需要對此進行調整:

mysql -h "server-name" -u root "password" "database-name" < "filename.sql"

或者有沒有辦法只運行這個腳本並連接到其中的 db from.cnf 文件?

上面有兩個問題。 一個是如何將 bash 變量放入 SQL 腳本中。 我會這樣做:

read -p 'Subject ID' SUBJECT_ID

mysql -e "SET @subject = '${SUBJECT_ID}'; source filename.sql;"

Bash 將在將${SUBJECT_ID}用作mysql -e命令的參數之前將其擴展為字符串。 因此,MySQL 變量被分配了 SUBJECT_ID 的字符串值。

如果 SUBJECT_ID 可能包含文字單引號字符,這將很棘手:所以我建議使用 Bash 語法進行字符串替換,以將其中的每個單引號變成兩個單引號:

mysql -e "SET @subject = '${SUBJECT_ID//'/''}'; source filename.sql;"

請注意,您必須在文件名后面加上分號。

第二個問題是關於指定主機、用戶和密碼。 我建議將這些放入選項文件中:

[client]
host=server-name
user=root
password=xyzzy

然后當您調用 mysql 客戶端時:

mysql --defaults-extra-file myoptions.cnf -e '...'

這是避免將明文密碼放在命令行上的好主意。

有關選項文件的更多詳細信息,請閱讀https://dev.mysql.com/doc/refman/8.0/en/option-files.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM