You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Bash直接更新MySQL表?解决1046未选库报错

解决Bash中直接执行MySQL更新命令的1046报错问题

嘿,我来帮你搞定这个问题!你碰到的ERROR 1046 (3D000)是因为你当前尝试的代码里,USE ${tmpdb};和后续的UPDATE命令没有在同一个MySQL连接里执行,导致执行UPDATE时没有选中目标数据库。

正确的实现方法有这几种:

方法1:将多个SQL命令合并到同一个-e参数中

把USE语句和UPDATE语句用分号分隔,放在同一个-e引号里,这样它们会在同一个连接中执行:

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

方法2:使用多个-e参数传递多条SQL命令

每个-e对应一条SQL语句,MySQL会在同一个连接里依次执行这些命令:

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

方法3:直接指定目标数据库(最简洁高效)

其实根本不需要写USE语句,在mysql命令后面直接加上数据库名即可,这样所有后续的SQL命令都会默认在这个数据库下执行:

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

额外提醒

  • 直接在命令行暴露密码存在安全风险,建议通过~/.my.cnf配置文件来存储用户名和密码,格式如下:
    [client]
    user=root
    password=xyzzy
    
    之后执行命令时就可以省略-u root -p$mysqlword部分,直接写mysql ${tmpdb} -e"..."即可。
  • 如果你的密码或数据库名包含特殊字符(比如空格、引号),记得给变量加上双引号,比如-p"$mysqlword"和"${tmpdb}",避免解析错误。

内容的提问来源于stack exchange,提问作者user7988893

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:37:32