web-dev-qa-db-ja.com

シェル-1行のクエリ

Mysqlクエリをbashを使用して1行で実行する必要があります。

次のようになります。

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;

それは可能ですか?

21
Cyclone

試しましたか

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

> output.txtの部分は無視できますが、ファイルを見て実行されたステートメントによって何が返されたかを確認すると便利です。)

43
Nishant

使用 -eオプション:

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

echoとパイプを使用します。

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

コマンドでパスワードを書き込むことは一般的には悪い考えです(人々は肩越しにパスワードを読むことができ、おそらくシェルの履歴に保存されるなど)。しかし、資格情報をファイルに入れることができます。ファイルに.で始まる名前を付けると、ファイルが非表示になり、より安全になります。

# .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-filemysqlに提供される最初のオプションである必要があることに注意してください。

1
Ian Mackinnon

これを本番環境で実行している場合、dbの詳細を公開しないように、最初にmysqlシェルにログインすることをお勧めします。

シェルにログインしたら、prepared.sqlファイルを使用しないのはなぜですか?

mysql -uユーザー-p

次に、ユーザーパスワードを入力します

これでシェルにログインし、ここからコマンドを安全に実行できます:

mysql> DBNAMEを使用mysql> SOURCE file.sql

これは、パスワードがログに表示されないようにするために、データベースでコマンドラインを操作する方法です。

0
HappyCoder

構文とアプローチはファイルリダイレクトに似ているため、通常はTriple lessよりも優先されます。履歴に戻ってクエリを変更するのは簡単

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

これはbashではHere Stringsと呼ばれています。それらの詳細については、こちらをご覧ください http://linux.die.net/abs-guide/x15683.html

文字列をコマンドにパイプしたい場合に便利です。

0
zainengineer