繁体   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