从Bash脚本更新MySQL数据库中的数据

7

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

我正在使用以下bash脚本,但它并没有起作用。显然,下面大多数变量已经被替换和简化以便于理解。

#!/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;

您混淆了插入和更新语法,导致程序无法正常工作。 - Jens
1
查询本身就是错误的。INSERT 没有 WHERE 子句。 - a1ex07
哎呀!当然你是对的。我犯了一个很大的疏忽。现在感觉很傻 :( - Grant
4个回答

16

在尝试了一些错误后找到了答案。

以防其他人也在寻找同样的东西,答案是:

#!/bin/bash

mysql -u username -puserpass dbname -e "UPDATE mytable SET mycolumn = 'myvalue' WHERE id='myid'";
请注意,-puserpass中的

“-p”

和您的密码之间没有空格。 如果您在-p userpass中加入了空格,则会提示您输入密码。
希望对某人有所帮助;)

1
如果使用正确的SQL和bash语法,则heredoc方法也可以起作用。但是,当您想要执行多个语句并且不支持事务时,上述两种方法都相当低效。在这种情况下,将bash脚本的输出导入到mysql的标准输入将更有效,并支持事务。 - symcbean
@symcbean,关于“将Bash脚本的输出导入到MySQL的标准输入中会更有效并支持事务”的问题。也许你应该提供一个例子。 - jww

4

3

由于您没有在脚本的结尾处键入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参数。

0

这也是对我有效的方法:像这样转义引号 \"

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接