mysql
はシンプルな SQL
シェルです(GNU readline
機能がある)。対話形式と非対話形式をサポートしています。対話形式で使用した場合、クエリ結果は
ASCII
テーブル形式で表示されます。非対話形式(フィルタなど)で使用した場合、結果はタブ区切り形式で表示されます(出力形式は、コマンドラインオプションで変更できます)。以下のように簡単ににスクリプトを実行できます。
shell> mysql database < script.sql > output.tab
クライアントでメモリ不足による問題が発生した場合、--quick
オプションを使用します。これにより、mysql
は mysql_store_result()
ではなく、mysql_use_result()
を使用して結果セットを取得します。
mysql
の使用は非常に簡単です。mysql
database
または mysql --user=user_name
--password=your_password database
のように、開始します。SQL
ステートメントを入力し、‘;
’、'\g
'、または
'\G
' で終了して Enter
キーを押します。
mysql
は、以下のオプションをサポートします。
-?, --help
ヘルプを表示して終了する。
-A, --no-auto-rehash
自動リハッシュを実行しない。テーブルおよびフィールドを完成させるには、'リハッシュ' を実行する必要がある。このオプションにより、mysql の起動が速くなる。
--prompt=...
mysql プロンプトを指定の形式に設定する。
-b, --no-beep
エラー時のビープ音をオフにする。
-B, --batch
結果をタブで区切り、各レコードが 1 行になるように出力する。ヒストリファイルでは使用しないこと。
--character-sets-dir=...
キャラクタセットが格納されているディレクトリ。
-C, --compress
サーバ/クライアントプロトコルで圧縮を使用する。
-#, --debug[=...]
デバッグログ。デフォルトは 'd:t:o,/tmp/mysql.trace'。
-D, --database=...
使用するデータベース。このオプションは主に、my.cnf
ファイルで使用する。
--default-character-set=...
デフォルトのキャラクタセットを設定する。
-e, --execute=...
コマンドを実行して終了する(--batch と同じ出力)。
-E, --vertical
クエリ(レコード)を縦方向に出力する。このオプションを指定しなくても、ステートメントを
\G
で終了すれば、同じように出力できる。
-f, --force
SQL エラーが発生しても続行する。
-g, --no-named-commands
名前付きコマンドが無効になる。\*
形式のみ使用する。またはセミコロン(‘;
’)で終わる行の最初でのみ名前付きコマンドを使用する。バージョン
10.9
以降、クライアントは起動時に、デフォルトでこのオプションを有効にするようになっている。ただし、-g
オプションでは、ロング形式のコマンドは最初の行から機能する。
-G, --enable-named-commands
名前付きコマンドが有効になる。ロング形式のコマンドもショートの \* コマンドと同様、有効になる。
-i, --ignore-space
関数名の後のスペースを無視する。
-h, --host=...
指定のホストに接続する。
-H, --html
HTML 出力を生成する。
-X, --xml
XML 出力を生成する。
-L, --skip-line-numbers
エラーの行番号を書き込まない。これは、エラーメッセージが含まれる結果ファイルを比較する際に使用する。
--no-pager
ページャーを無効にし、stdout に出力する。対話式ヘルプ(\h)も参照のこと。
--no-tee
出力ファイルを無効にする。対話式ヘルプ(\h)も参照のこと。
-n, --unbuffered
クエリごとにバッファをフラッシュする。
-N, --skip-column-names
結果にカラム名を書き込まない。
-O, --set-variable=name=value
変数に値を設定する。--help
により、変数が一覧表示される。 注意:
--set-variable=name=value
および
-O name=value
構文は、MySQL 4.0
で廃止されたた。代わりに
--name=value
を使用すること。
-o, --one-database
デフォルトのデータベースだけを更新する。バイナリログ内の他のデータベースを更新しない場合に使用する。
--pager[=...]
出力タイプ。デフォルトは ENV
変数の PAGER
である。有効なページャーは、less、more、cat
[> filename]
など。対話式ヘルプ(\h)も参照のこと。このオプションはバッチモードでは無効。ページャーは
Unix でのみ動作する。
-p[password], --password[=...]
サーバ接続時に使用するパスワード。パスワードをコマンドラインで指定しなかった場合、プロンプトが表示される。注意:
ショート形式の -p
を使用する場合、オプションとパスワードの間にスペースを入れてはいけない。
-P port_num, --port=port_num
接続に使用する TCP/IP ポート番号。
--protocol=(TCP | SOCKET | PIPE | MEMORY)
使用する接続プロトコルを指定する。MySQL 4.1 で導入。
-q, --quick
結果をキャッシュせず、行ごとに出力する。出力が中断した場合、サーバが遅くなる可能性がある。ヒストリファイルは使用しない。
-r, --raw
エスケープ変換なしでカラム値を書き出す。--batch
とともに使用。
--reconnect
接続が失われた場合、サーバへの再接続を自動的に 1 度だけ試行する。
-s, --silent
サイレントモード。
-S --socket=...
接続に使用するソケットファイル。
-t --table
表形式で出力。これは、非バッチモードでのデフォルトである。
-T, --debug-info
終了時にデバッグ情報を出力する。
--tee=...
出力ファイルにすべて出力する。対話式ヘルプ(\h)も参照のこと。バッチモードでは無効。
-u, --user=#
カレントユーザでない場合のログインユーザ。
-U, --safe-updates[=#],
--i-am-a-dummy[=#]
キーを使用する UPDATE
と
DELETE
のみ許可する。このオプションについては、詳細を後で説明する。このオプションが
my.cnf
ファイルに含まれている場合、--safe-updates=0
でリセットできる。
-v, --verbose
冗長出力(-v -v -v で表出力形式となる)。
-V, --version
バージョン情報を出力して終了する。
-w, --wait
接続が切断された場合、停止せずに待機して再試行する。
-O
または --set-variable
には、以下の変数も設定できます。注意:
--set-variable=name=value
および -O
name=value
構文は、MySQL 4.0
で廃止されましたた。代わりに
--name=value
を使用してください。
変数名 | デフォルト | 説明 |
connect_timeout | 0 | 接続タイムアウトの秒数。 |
local-infile | 0 |
LOAD DATA INFILE の LOCAL
機能の無効化(0)または有効化(1)。 |
max_allowed_packet | 16777216 | サーバ間での送受信可能な最大パケット長。 |
net_buffer_length | 16384 | TCP/IP およびソケット接続用バッファ。 |
select_limit | 1000 |
--safe-updates 使用時の SELECT
の自動制限。 |
max_join_size | 1000000 |
--safe-updates 使用時に 1
回の結合で扱うレコードの自動制限。 |
mysql
クライアントがサーバにクエリを送信しているときに接続が切断された場合、クライアントは自動的に再接続を試行し、クエリを再度送信します。注意:
再接続に成功した場合でも、最初の接続が終了した時点で、前回のセッションオブジェクト(テンポラリテーブル、ユーザ変数、セッション変数)はすべて失われています。したがって、上記の動作にはリスクが伴います。たとえば、以下の例の場合、ユーザが気付かない間にサーバがシャットダウンし、再起動しています。
mysql>set @a=1;
Query OK, 0 rows affected (0.05 sec) mysql>insert into t values(@a);
ERROR 2006: MySQL server has gone away No connection. Trying to reconnect... Connection id: 1 Current database: test Query OK, 1 row affected (1.30 sec) mysql>select * from t;
+------+ | a | +------+ | NULL | +------+ 1 row in set (0.05 sec)
この場合、@a
ユーザ変数は接続の切断と同時に失われ、再接続後は未定義になっています。このリスクを回避するには、mysql
クライアントを --disable-reconnect
オプションで開始します。
コマンドラインで 'help'
を入力すると、mysql
がサポートするコマンドを出力できます。
mysql> help
MySQL commands:
help (\h) Display this text.
? (\h) Synonym for `help'.
clear (\c) Clear command.
connect (\r) Reconnect to the server.
Optional arguments are db and host.
delimiter (\d) Set query delimiter.
edit (\e) Edit command with $EDITOR.
ego (\G) Send command to mysql server,
display result vertically.
exit (\q) Exit mysql. Same as quit.
go (\g) Send command to mysql server.
nopager (\n) Disable pager, print to stdout.
notee (\t) Don't write into outfile.
pager (\P) Set PAGER [to_pager].
Print the query results via PAGER.
print (\p) Print current command.
prompt (\R) Change your mysql prompt.
quit (\q) Quit mysql.
rehash (\#) Rebuild completion hash.
source (\.) Execute an SQL script file.
Takes a file name as an argument.
status (\s) Get status information from the server.
system (\!) Execute a system shell command.
tee (\T) Set outfile [to_outfile].
Append everything into given outfile.
use (\u) Use another database.
Takes database name as argument.
edit
、nopager
、pager
、system
の各コマンドは Unix でのみ動作します。
status
コマンドを実行すると、接続情報と、使用しているサーバの情報を取得できます。--safe-updates
モードで status
を実行すると、クエリに影響する
mysql
変数値も出力されます。
初心者に便利なスタートアップオプションとして、--safe-updates
(MySQL
バージョン 3.23.11
で導入)があります(または、どこかで
DELETE FROM table_name
を実行しているが WHERE
節を忘れたユーザの場合は
--i-am-a-dummy
)。このオプションを使用すると、接続時、mysql
は以下のコマンドを MySQL サーバに送信します。
SET SQL_SAFE_UPDATES=1,SQL_SELECT_LIMIT=#select_limit#, SQL_MAX_JOIN_SIZE=#max_join_size#"
ここで #select_limit#
と
#max_join_size#
は、mysql
コマンドラインから設定できる変数です。 See
項5.5.6. 「SET
構文」。
効果は以下のとおりです。
WHERE
部分にキー制約がなければ、UPDATE
ステートメントまたは DELETE
ステートメントを実行できない。ただし、LIMIT
を使用すれば UPDATE/DELETE
を強制実行できる。
UPDATE table_name SET not_key_column=# WHERE not_key_column=# LIMIT 1;
大きな結果はすべて、自動的に
#select_limit#
レコードの制限を受ける。
#max_join_size
以上のレコードをチェックする必要がありそうな
SELECT
ステートメントは停止する。
mysql
クライアントに関するヒント
データによっては、横方向ではなく、縦方向に表示したほうが見やすい場合があります。たとえば改行を含む長いテキストでは、縦方向に出力した方が読みやすくなります。
mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 lIMIT 300,1\G
*************************** 1. row ***************************
msg_nro: 3068
date: 2000-03-01 23:29:50
time_zone: +0200
mail_from: Monty
reply: monty@no.spam.com
mail_to: "Thimble Smith" <tim@no.spam.com>
sbj: UTF-8
txt: >>>>> "Thimble" == Thimble Smith writes:
Thimble> Hi. I think this is a good idea. Is anyone familiar with UTF-8
Thimble> or Unicode? Otherwise, I'll put this on my TODO list and see what
Thimble> happens.
Yes, please do that.
Regards,
Monty
file: inbox-jani-1
hash: 190402944
1 row in set (0.09 sec)
ログには、tee
オプションを使用できます。tee
は --tee=...
オプションで起動できます。または、tee
コマンドで対話式にコマンドラインから起動することもできます。画面に表示されるデータはすべて、指定のファイルにも記録されます。これは、デバッグ目的にも非常に役立ちます。tee
は、notee
でコマンドラインから無効にできます。tee
を再び実行すると、ログが再開されます。パラメータなしの場合、前回のファイルが使用されます。注意:
tee
は、コマンドごとに(次のコマンドを待つコマンドラインが表示される直前に)、結果をファイルにフラッシュします。
Unix の
less、more、その他同様のプログラムの対話式モードで結果を参照したり検索するには、--pager[=...]
オプションを使用します。引数がない場合、mysql
クライアントは PAGER
環境変数を探して、pager
をその値に設定します。 pager
は、pager
コマンドで対話式コマンドラインから開始でき、nopager
コマンドで無効にできます。コマンドは任意の引数を取り、pager
がその値に設定されます。pager
コマンドは引数なしでも呼び出せますが、--pager
オプションが使用されていることが必要になります。そうしなければ、pager
はデフォルトで stdout
になります。pager
は、Windows
にはない popen()
関数を使用するため、Unix
でのみ有効です。Windows では代わりに
tee
オプションを使用できます。ただし状況によっては、pager
ほど便利ではありません。
pager
に関するヒント
ファイルへの書き込みに使用できる。
mysql> pager cat > /tmp/log.txt
これで、結果がファイルにのみ出力される。また、使用したいプログラムの任意のオプションを
pager
で渡すことができる。
mysql> pager less -n -i -S
上記例の -S
オプションに注目。これは、結果を参照する際に非常に役立つ。このオプションを横方向の表示(\g
または ‘;
’
でコマンドを終了)、および縦方向の表示(\G
でコマンドを終了)で試してみるとわかる。非常に幅の広い結果セットは画面上で見にくい場合があり、-S
オプションを less
に設定することにより、対話式の
less
で、画面幅より長い行が次の行まで続くことなく、結果セットを左から右に表示することができる。この方法により、結果セットを非常に見やすくできる。対話式の
less
で、-S
によりこのモードのオンオフを切り替えることができる。less
に関する詳細については 'h' を参照のこと。
結果の処理には、非常に複雑な方法を組み合わせることができる。以下の例では、結果を、/dr1 と /dr2 にマウントされている 2 つの異なるハードディスク上の 2 つの異なるディレクトリにある 2 つのファイルに記録し、画面上では less で表示する。
mysql>pager cat | tee /dr1/tmp/res.txt | \
tee /dr2/tmp/res2.txt | less -n -i -S
上記の 2
つの関数を組み合わせることも可能です。tee
を有効にし、pager
を 'less'
に設定することにより、Unix 'less'
で結果を参照しながら同時に 1
つのファイルにすべてを記録することができます。pager
で使用される Unix の tee
と
mysql
クライアントの組み込み
tee
がありますが、組み込み
tee
は tee
が利用できない場合でも使用できます。また、組み込み
tee
は画面で出力されたものすべてをログファイルに記録しますが、pager
で使用される Unix tee
はそれほど多くのことを記録しません。最後に、対話式
tee
の方がオン/オフを切り替えやすいという点があります。ファイルに何かを記録したいのだが、ときどき機能をオフにもしたいという場合に便利です。
MySQL バージョン 4.0.2 から、mysql
コマンドラインクライアントでプロンプトを変更できるようになりました。
以下のプロンプトオプションを使用できます。
オプション | 説明 |
\v | mysqld バージョン |
\d | 使用中のデータベース |
\h | 接続ホスト |
\p | 接続ポート |
\u | ユーザ名 |
\U | 完全ユーザ名@ホスト |
\\ | ‘\ ’ |
\n | 新規改行 |
\t | タブ |
\ | スペース |
\_ | スペース |
\R | 24 時間形式(0 〜 23) |
\r | 標準時間形式(1 〜 12) |
\m | 分 |
\y | 2 桁年 |
\Y | 4 桁年 |
\D | 完全日付形式 |
\s | 秒 |
\w | 3 文字形式での曜日(Mon、Tue など) |
\P | am/pm |
\o | 数字による月 |
\O | 3 文字形式での月(Jan、Feb など) |
\c | コマンド実行ごとにカウントするカウンタ |
‘\
’
にそれ以外の文字が続くと、単にその文字になります。
プロンプトは以下の場所で設定できます。
環境変数
MYSQL_PS1
環境変数をプロンプト文字列に設定できる。次に例を示す。
shell> export MYSQL_PS1="(\u@\h) [\d]> "
my.cnf
,
.my.cnf
MySQL 設定ファイルの mysql
グループで prompt
オプションを設定できる。次に例を示す。
[mysql] prompt=(\u@\h) [\d]>\_
コマンドライン
mysql
のコマンドラインで
--prompt
オプションを設定できる。 次に例を示す。
shell> mysql --prompt="(\u@\h) [\d]> "
(user@host) [database]>
対話式
prompt
(または
\R
)を使用して対話式にプロンプトを変更することもできる。次に例を示す。
mysql>prompt (\u@\h) [\d]>\_
PROMPT set to '(\u@\h) [\d]>\_' (user@host) [database]> (user@host) [database]> prompt Returning to default PROMPT of mysql> mysql>
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.