保持MySQL连接打开以从shell提交多个查询

时间:2014-09-02 06:35:57

标签: mysql bash shell

我想了解更多关于MySQL命令行工具的工作原理。

假设我希望能够编写多个SQL语句的脚本,并使用shell脚本在处理语句时输出语句的描述。这是一个通用示例,其中del_sql,ins_sql和qry_sql将引用同一数据集上的任何删除,插入和选择查询。

echo "Deleting data in the range."
echo $del_sql | mysql -h "$mysql_host" -u "$mysql_user" -p"$mysql_pass" -D "$mysql_db"

echo "Inserting data into the range."
echo $ins_sql | mysql -h "$mysql_host" -u "$mysql_user" -p"$mysql_pass" -D "$mysql_db"

echo "Querying data from the range."
echo $qry_sql | mysql -h "$mysql_host" -u "$mysql_user" -p"$mysql_pass" -D "$mysql_db"

我关心的是 - 这是否打开和关闭与数据库的三个独立连接,这比一次提交所有语句更昂贵?在此示例中,假设all_sql是一个字符串,其中包含由分号分隔的所有三个语句。

echo "Deleting, inserting, and querying data in the range."
echo $all_sql | mysql -h "$mysql_host" -u "$mysql_user" -p"$mysql_pass" -D "$mysql_db"

我尝试了以下内容,只是搞乱它,认为这是有道理的。

mysql -h "$mysql_host" -u "$mysql_user" -p"$mysql_pass" -D "$mysql_db"
echo $del_sql | mysql -e
echo $ins_sql | mysql -e
echo $qry_sql | mysql -e

但这显然是不正确的语法。

1 个答案:

答案 0 :(得分:2)

我不是程序员,但在数据库方面,我可以告诉你,MySQL可以非常有效地处理这个问题。它使用线程缓存/池。每个线程基本上都是一个连接。

您可以在此处详细了解:How MySQL Uses Threads for Client Connections

当您通过命令行客户端登录数据库然后在另一个shell中发出脚本时,您甚至可以观察到这一点。

做一个

SHOW PROCESSLIST;

脚本运行后,您会看到状态为SLEEPING的连接仍然存在。当您再次执行脚本时,它将被重用。