Shell - one line query

隐身守侯 提交于 2019-12-04 10:04:58

问题


I need to execute a mysql query in one line using bash.

It should be something like this:

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

But instead of the < query.file it would like to use a raw query like this:

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

Is that possible?


回答1:


Did you try

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

(the > output.txt part can be ignored but, it will be useful to see what was returned by the statement executed by looking at the file.)




回答2:


Use the -e option:

$ mysql -e "UPDATE ..."



回答3:


Use echo and a pipe:

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



回答4:


Writing your password in a command is generally a bad idea (people can read it over your shoulder, it probably gets stored in your shell history, etc.), but you can put your credentials in a file. Giving the file a name starting with . makes it hidden, which is also more secure.

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

Make sure only you can read the file:

chmod 600 .db.conf

Then call MySQL like so:

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

or:

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

Note that --defaults-extra-file needs to be the first option supplied to mysql otherwise it freaks out.




回答5:


I normally prefer Triple less then as its syntax and approach is similar to file redirect. Easy to go back in history and modify query

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

It is called Here Strings in bash. You can find more about them here http://linux.die.net/abs-guide/x15683.html

It is useful when you want to pipe string to commands.




回答6:


If you are running this on a production environment, it would be better to login to the mysql shell first so as not to expose your db details.

Once logged into shell, why not just use a prepared.sql file?

mysql -u user -p

Next, enter your user password

Now you are logged into shell and you can run commands securely from here:

mysql> use DBNAME mysql> SOURCE file.sql

This is how I operate on the command line with my databases in order for my passwords not to appear in the logs.



来源:https://stackoverflow.com/questions/9462416/shell-one-line-query

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!