【问题标题】:Updating data in mysql db from bash script从 bash 脚本更新 mysql db 中的数据
【发布时间】:2015-02-11 19:02:15
【问题描述】:

这是我第一次尝试使用可执行的 .sh 文件在 mysql 数据库中插入一些信息。

我正在使用以下 bash 脚本,但它不起作用。显然,为了便于理解,下面的大多数 var 都已被替换和简化。

#!/bin/bash

mysql -D mydbname -u mydbuser -p mydbpass <<EOF
INSERT INTO mytable (mycolumn) VALUES ('myvalue') WHERE id = '13';

exit;

你可以看到我只想在id = 13的行中插入我的值,并且该行确实存在。

我认为我没有正确格式化查询吗?

编辑:好的,在下面的建议之后,我现在得到了这个,但它仍然不起作用?

#!/bin/bash
mysql -D mydbname -u mydbuser -p mydbpass <<EOF
UPDATE mytable SET mycolumn = 'myvalue' WHERE id = '13';
exit;

【问题讨论】:

  • 混合插入和更新语法。那行不通。
  • 查询本身是错误的。 INSERT 没有 WHERE 子句
  • 噢!当然你是对的..我的主要疏忽..现在感觉很傻:(

标签: mysql bash shell insert


【解决方案1】:

您的查询不起作用,因为您没有在脚本末尾键入 EOF。请参阅下面的示例。

#!/bin/bash

mysql -u root -ppassword DB_NAME <<EOF
SELECT * FROM CUSTOMERS WHERE NAME='YOURNAME';
SELECT * FROM ANOTHER_TABLE WHERE SOMETHING_ELSE;
... more queries
EOF

请注意,如果连接不需要密码,则可以跳过 -ppassword 参数。

【讨论】:

    【解决方案2】:

    经过反复试验,找到了答案。

    以防万一其他人也想做同样的事情:

    #!/bin/bash
    
    mysql -u username -puserpass dbname -e "UPDATE mytable SET mycolumn = 'myvalue' WHERE id='myid'";
    

    注意-p和你的密码之间没有空格-puserpass如果你放一个空格-p userpass它会提示你输入密码。

    希望对某人有所帮助;)

    【讨论】:

    • heredoc 方法如果使用正确的 SQL 和 bash 语法也可以正常工作。但是,当您想要执行多个语句时,这种方法和上述方法都相当低效 - 而且它不适用于事务。在这种情况下,将 bash 脚本的输出通过管道传输到 mysql 的标准输入会更加高效并支持事务。
    • @symcbean,回复:“将 bash 脚本的输出通过管道传输到 mysql 的标准输入将更加高效并支持事务”。或许你应该举个例子。
    【解决方案3】:

    该解决方案就像上面帖子中指定的魅力一样。您还可以在指定 dbname 时使用 -D 选项。

    #!/bin/bash
    
    mysql -u username -puserpass -D dbname -e "UPDATE mytable SET mycolumn = 'myvalue' WHERE id='myid'";
    

    有关选项的其他参考,请参阅以下链接:https://www.shellhacks.com/mysql-run-query-bash-script-linux-command-line/

    【讨论】:

      【解决方案4】:

      这对我也有用:像这样转义引用\"

      mysql -u userName --password=yourPassword -D databaseName -e "UPDATE tableName SET columnName = \"${variable}\" WHERE numberColumn = \"${numberVariable}\""
      

      【讨论】:

        猜你喜欢
        • 2017-03-16
        • 1970-01-01
        • 2021-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-23
        • 1970-01-01
        相关资源
        最近更新 更多