Shell - 一行查询

时间:2012-02-27 09:07:29

标签: mysql shell command-line freebsd

我需要使用bash在一行中执行mysql查询。

它应该是这样的:

mysql database --user='root' --password='my-password' < query.file

但是它不是< query.file而是想使用这样的原始查询:

mysql database --user='root' --password='my-password' < UPDATE `database` SET `field1` = '1' WHERE `id` = 1111;

这可能吗?

6 个答案:

答案 0 :(得分:39)

你试过吗

 mysql -u root -pmy_password -D DATABASENAME -e "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111;" > output.txt 

(可以忽略> output.txt部分,但查看通过查看文件执行的语句返回的内容会很有用。)

答案 1 :(得分:6)

使用-e选项:

$ mysql -e "UPDATE ..."

答案 2 :(得分:5)

使用echo和管道:

echo "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111;" | mysql database --user='root' --password='my-password'

答案 3 :(得分:1)

在命令中编写密码通常是一个坏主意(人们可以通过你的方式阅读它,它可能存储在你的shell历史记录中等),但你可以将你的凭据放在一个文件中。

.

确保只有您可以阅读文件:

# .db.conf
[client]
database=myDatabase
user=myUserName
password=myPassWord

然后像这样调用MySQL:

chmod 600 .db.conf

或:

mysql --defaults-extra-file=.db.conf -e "UPDATE database SET field1 = '1' WHERE id = 1111;"

请注意,echo "UPDATE database SET field1 = '1' WHERE id = 1111;" | mysql --defaults-extra-file=.db.conf 必须是提供给--defaults-extra-file的第一个选项,否则会吓坏它。

答案 4 :(得分:0)

我通常更喜欢Triple,因为它的语法和方法类似于文件重定向。易于回溯历史并修改查询

mysql database --user='root' --password='my-password' <<< "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111"

在bash中称为字符串。您可以在此处找到有关他们的更多信息http://linux.die.net/abs-guide/x15683.html

当您想将字符串传递给命令时,它非常有用。

答案 5 :(得分:0)

如果您在生产环境中运行此操作,最好首先登录mysql shell,以免暴露您的数据库详细信息。

登录shell后,为什么不使用prepared.sql文件?

  

mysql -u user -p

接下来,输入您的用户密码

现在您已登录到shell,您可以从此处安全地运行命令:

的MySQL&GT;使用DBNAME MySQL的&GT; SOURCE file.sql

这是我在数据库的命令行上操作的方式,以便我的密码不会出现在日志中。