第1行出现错误1046(3d000):未选择数据库

jgwigjjp  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(342)

我想用bash而不是mysql终端直接更新一些表。
通常的方法是在bash中用here doc string添加sql命令。

mysqlword="xyzzy"
tmpdb="yyyy"
mysql -u root -p$mysqlword  <<EOF
    USE ${tmpdb};
    UPDATE wp_posts SET post_content = replace(post_content, 'domain1', 'domain2');
EOF

尝试另一种方法来做同样的工作。

mysqlword="xyzzy"
tmpdb="yyyy"
mysql -u root -p$mysqlword  -e"USE ${tmpdb};"
sql="UPDATE wp_posts SET post_content = replace(post_content, 'domain1', 'domain2');"
mysql -u root -p$mysqlword  -e"$sql"
ERROR 1046 (3D000) at line 1: No database selected

我已选择数据库 mysql -u root -p$mysqlword -e"USE ${tmpdb};" 之前 mysql -u root -p$mysqlword -e"$sql" ,如何修复?

fnvucqvd

fnvucqvd1#

你必须这样 USE 每次打开连接时都会打开数据库。所以你必须把这两个命令结合起来:

mysqlword="xyzzy"
tmpdb="yyyy"
sql="USE ${tmpdb}; UPDATE wp_posts SET post_content = replace(post_content, 'domain1', 'domain2');"
mysql -u root -p$mysqlword  -e"$sql"
wlp8pajw

wlp8pajw2#

您可以通过以下几种方式解决/简化此问题:
通过删除单独的use语句。
通过从命令行中删除用户凭据。
在update语句中直接引用数据库名称:

sql="UPDATE wp_posts SET ${tmpdb}.post_content = replace(post_content, 'domain1', 'domain2');"

如果您的mysql版本>=5.6.6,请使用 mysql_config_editor 将登录凭据放入.mylogin.cnf文件。它将保存键入和密码将被加密。
例如。

mysql_config_editor --login-path=root --user=root --host=localhost --password

一旦设置,bash命令就会更简单(更安全)

tmpdb=yyyy
sql="UPDATE wp_posts SET ${tmpdb}.post_content = replace(post_content, 'domain1', 'domain2');"
mysql --login-path=root -e "$sql"

或者,因为变量在这里不是必须的,

mysql --login-path=root -e "UPDATE wp_posts SET yyyy.post_content = replace(post_content, 'domain1', 'domain2');"

相关问题