it-roy-ru.com

Shell - однострочный запрос

Мне нужно выполнить запрос MySQL в одну строку, используя Bash.

Это должно быть что-то вроде этого:

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;

Это возможно?

19
Cyclone

Ты пробовал 

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

(часть > output.txt можно игнорировать, но будет полезно увидеть, что было возвращено оператором, выполненным при просмотре файла.)

38
Nishant

Используйте опцию -e:

$ mysql -e "UPDATE ..."
6
user647772

Используйте echo и канал:

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

Ввод пароля в команду, как правило, плохая идея (люди могут прочитать его через плечо, он, вероятно, будет сохранен в вашей истории оболочки и т.д.), Но вы можете поместить свои учетные данные в файл. Задание имени файла, начинающегося с ., делает его скрытым, что также более безопасно.

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

Убедитесь, что только вы можете прочитать файл:

chmod 600 .db.conf

Затем вызовите MySQL так:

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 должен быть первым параметром, указанным для mysql, иначе он выйдет из строя.

1
Ian Mackinnon

Если вы выполняете это в производственной среде, было бы лучше сначала войти в mysql Shell, чтобы не раскрывать детали вашей базы данных.

После входа в Shell, почему бы просто не использовать подготовленный файл.sql?

mysql -u пользователь -p

Далее введите свой пароль пользователя

Теперь вы вошли в Shell и можете безопасно выполнять команды отсюда:

mysql> использовать DBNAME mysql> SOURCE file.sql

Вот как я работаю в командной строке со своими базами данных, чтобы мои пароли не появлялись в журналах.

0
HappyCoder

Обычно я предпочитаю Triple меньше, так как его синтаксис и подход похож на перенаправление файлов. Легко вернуться в историю и изменить запрос

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

Это называется Here Strings in bash. Вы можете найти больше о них здесь http://linux.die.net/abs-guide/x15683.html

Это полезно, когда вы хотите передать строку в команды.

0
zainengineer