我想写一个*.sh脚本来执行多个MySQL命令.
目前,我能做的就是以下内容
mysql -h$host -u$user -p$password -e "drop database $dbname;"
mysql -h$host -u$user -p$password -e "create database $dbname;"
mysql -h$host -u$user -p$password -e "another MySQL command"
...
Run Code Online (Sandbox Code Playgroud)
有没有办法避免每次我想执行MySQL命令时键入"mysql -h $ host -u $ user -p $ password -e"?
Eri*_*ang 23
我想你可以从文本文件中执行MySQL语句
这是cmds.txt文件,其中包含MySQL命令:
select colA from TableA;
select colB from TableB;
select colC from TableC;
Run Code Online (Sandbox Code Playgroud)
要使用shell脚本执行它们,请键入
mysql -h$host -u$user -p$password db_dbname < cmds.txt
Run Code Online (Sandbox Code Playgroud)
这样,您就可以将MySQL命令与shell脚本分开.
您可能希望脚本向您显示进度信息.为此,您可以使用"--verbose"选项调用mysql.
有关更多信息,请参阅https://dev.mysql.com/doc/refman/5.6/en/mysql-batch-commands.html
chr*_*con 13
您可以使用单个多重查询:
mysql -h$host -u$user -p$password -e "drop database $dbname;create database $dbname;another MySQL command;"
Run Code Online (Sandbox Code Playgroud)
只需编写所有分开的查询即可;.他们将一个接一个地运行.
Erw*_*els 12
请注意,您还可以使用HERE文档在同一脚本中进行查询:
mysql -h$host -u$user -p$password db_dbname <<'EOF'
select colA from TableA;
select colB from TableB;
select colC from TableC;
EOF
Run Code Online (Sandbox Code Playgroud)
请注意,我使用'EOF'而不是EOF在第一行,以防止脚本的内容禁用参数替换(特别是`可能有问题)
另请注意,在最终之前不EOF应该有任何空格(除非您使用<<-而不是<<- 在这种情况下,前导制表符被剥离):
mysql -h$host -u$user -p$password db_dbname <<- 'EOF'
?select colA from TableA;
?select colB from TableB;
?select colC from TableC;
?EOF
Run Code Online (Sandbox Code Playgroud)
(替换?为制表符).
有关HERE doc语法的详细信息,请参阅bash文档.
Dav*_*ave 10
有几种方法,在linux中你有:
来自mysql cli:
mysql> source mycmds.sql
Run Code Online (Sandbox Code Playgroud)
使用管道:
echo "SELECT ..; INSERT ..;" | mysql ...
Run Code Online (Sandbox Code Playgroud)
使用管道或重定向从文件执行命令:
cat file.sql | mysql ... OR mysql .. < file.sql
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34474 次 |
| 最近记录: |