4.5.1.2 mysql コマンド

mysql は、ユーザーが発行する各 SQL ステートメントを、実行のためサーバーに送信します。mysql 自体が解釈するコマンドもあります。これらのコマンドのリストを表示するには、mysql> プロンプトで help または \h と入力します。

mysql> help

List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
?         (\?) Synonym for `help'.
clear     (\c) Clear command.
connect   (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement 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.
help      (\h) Display this help.
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.
charset   (\C) Switch to another charset. Might be needed for processing
               binlog with multi-byte charsets.
warnings  (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.

For server side help, type 'help contents'

mysql--binary-mode オプションで起動された場合、非インタラクティブモードの charset および delimiter (mysql にパイプされた入力または source コマンドでロードされた入力) を除いて、すべての mysql コマンドは無効になります。

各コマンドにはそれぞれロング形式とショート形式があります。ロング形式では大文字小文字は区別されせんが、ショート形式では区別されます。ロング形式にはオプションのセミコロン終端記号があとに続くこともありますが、ショート形式ではありません。

複数行の /* ... */ コメント内でショート形式のコマンドを使用することはサポートされていません。

  • help [arg], \h [arg], \? [arg], ? [arg]

    使用可能な mysql コマンドの一覧を示すヘルプメッセージを表示します。

    help コマンドに引数を指定した場合、mysql は、サーバー側のヘルプにアクセスして MySQL リファレンスマニュアルの内容から検索するための文字列として引数を使用します。詳細は、セクション4.5.1.4「mysql サーバー側のヘルプ」を参照してください。

  • charset charset_name, \C charset_name

    デフォルトの文字セットを変更し、SET NAMES ステートメントを発行します。これにより、自動再接続が有効になっている状態で mysql が稼働中の場合 (これは推奨されていません) に、クライアントとサーバーの間で文字セットの同期が保持されます。これは、指定された文字セットが再接続に使用されるためです。

  • clear, \c

    現在の入力をクリアします。これは、入力しているステートメントの実行を取りやめる場合に使用します。

  • connect [db_name host_name]], \r [db_name host_name]]

    サーバーに再接続します。オプションのデータベース名およびホスト名の引数を指定して、デフォルトのデータベースまたはサーバーが稼働しているホストを指定することもできます。省略した場合は、現在の値が使用されます。

  • delimiter str, \d str

    mysql が SQL ステートメント間の区切り文字として解釈する文字列を変更します。デフォルトはセミコロン (;) 文字です。

    区切り文字の文字列は、delimiter コマンド行で引用符ありまたはなしの引数として指定できます。単一引用符 (')、二重引用符 (")、または逆引用符 (`) 文字で囲むことができます。引用符で囲まれた文字列内に引用符を含めるには、別の引用符で文字列を囲むか、またはバックスラッシュ (\) 文字で引用符をエスケープ処理します。バックスラッシュは MySQL のエスケープ文字であるため、引用符で囲まれた文字列の外側では使用しないようにしてください。引用符で囲まれていない引数については、区切り文字は最初のスペースまたは行の最後まで読み取られます。引用符で囲まれた引数の場合、区切り文字はその行の対応する引用符まで読み取られます。

    mysql は、区切り文字列のインスタンスがどこで検出されても (引用符で囲まれた文字列内を除いて)、ステートメントの区切り文字として解釈します。ほかの語に出現する可能性のある区切り文字を定義しないように注意してください。たとえば、区切り文字を X と定義すると、ステートメントで INDEX という語を使用できなくなります。mysql はこれを INDE に区切り文字 X が続くと解釈します。

    mysql によって認識される区切り文字がデフォルトの ; 以外の何かに設定されている場合、その文字のインスタンスは解釈されずにサーバーに送信されます。しかし、サーバー自体は引き続き ; をステートメントの区切り文字として解釈し、その解釈に従ってステートメントを処理します。サーバー側でのこの動作は、複数ステートメントの実行 (セクション23.8.17「複数ステートメント実行の C API サポート」を参照してください) や、ストアドプロシージャーおよび関数の本体、トリガー、およびイベントの解析 (セクション20.1「ストアドプログラムの定義」を参照してください) に効果があります。

  • edit, \e

    現在の入力ステートメントを編集します。mysql では、EDITOR および VISUAL 環境変数の値を確認して、どのエディタを使用するかを判断します。どちらの変数も設定されていない場合、デフォルトのエディタは vi です。

    edit コマンドは Unix でのみ機能します。

  • ego, \G

    現在のステートメントを、実行するためにサーバーに送信し、結果を縦の形式で表示します。

  • exit, \q

    mysql を終了します。

  • go, \g

    現在のステートメントを、実行するためにサーバーに送信します。

  • nopager, \n

    出力のページングを無効にします。pager の説明を参照してください。

    nopager コマンドは Unix でのみ機能します。

  • notee, \t

    tee ファイルへの出力コピーを無効にします。tee の説明を参照してください。

  • nowarning, \w

    各ステートメントのあとの警告の表示を無効にします。

  • pager [command], \P [command]

    出力のページングを有効にします。mysql を呼び出すときに --pager オプションを使用することで、lessmore、またはその他の同様のプログラムなどの Unix プログラムを使って、インタラクティブモードでクエリー結果を参照または検索できます。オプションで値を特定しない場合、mysqlPAGER 環境変数の値を確認し、ページャーをその値に設定します。ページャー機能はインタラクティブモードの場合のみ機能します。

    出力ページングは pager コマンドでインタラクティブに有効にでき、nopager で無効にできます。このコマンドはオプションの引数を取ります。指定された場合、ページングプログラムはそれに設定されます。引数がない場合、ページャーはコマンド行で設定されたもの、またはページャーが指定されていない場合は stdout になります。

    出力ページングは Unix 上でのみ機能します。これは Windows では存在しない popen() 関数を使用するからです。Windows では、クエリー出力の保存に tee オプションを代わりに使用できますが、これは場合によっては、出力のブラウズには pager ほど便利ではありません。

  • print, \p

    現在の入力ステートメントを実行しないで出力します。

  • prompt [str], \R [str]

    mysql プロンプトを指定の文字列に再構成します。プロンプトで使用できる特殊文字シーケンスについては、このセクションのあとの方で説明します。

    引数なしで prompt コマンドを指定すると、mysql はプロンプトをデフォルトの mysql> にリセットします。

  • quit, \q

    mysql を終了します。

  • rehash, \#

    ステートメントの入力中にデータベース、テーブル、およびカラムの名前補完を可能にする補完ハッシュを再構築します。(--auto-rehash オプションの説明を参照してください。)

  • source file_name, \. file_name

    指定されたファイルを読み取り、その中に含まれているステートメントを実行します。Windows では、パス名区切り文字を / または \\ に指定できます。

  • status, \s

    使用中の接続とサーバーに関するステータス情報を表示します。--safe-updates モードで稼働中の場合、status はクエリーに影響する mysql 変数の値も出力します。

  • system command, \! command

    デフォルトのコマンドインタプリタを使って指定のコマンドを実行します。

    system コマンドは Unix でのみ機能します。

  • tee [file_name], \T [file_name]

    mysql の呼び出し時に --tee オプションを使用することで、ステートメントとその出力をログに記録できます。画面上に表示されるデータはすべて指定されたファイルに追加されます。これはデバッグを行う際にも非常に便利です。mysql では、各ステートメントが終わって次のプロンプトが表示される直前に、結果をファイルにフラッシュします。tee 機能はインタラクティブモードの場合のみ機能します。

    tee コマンドを使用すれば、この機能をインタラクティブに有効にできます。パラメータがない場合、以前のファイルが使用されます。tee ファイルを無効にするには、notee コマンドを使用します。tee を実行するとロギングが再度有効になります。

  • use db_name, \u db_name

    db_name をデフォルトデータベースとして使用します。

  • warnings, \W

    各ステートメントのあとの警告の表示を有効にします (存在する場合)。

pager コマンドのヒントを次に記します。

  • これを使用してファイルに書き込むと、結果はファイルにのみ送られます。

    mysql> pager cat > /tmp/log.txt
    

    ページャーとして使用するプログラムのオプションを渡すこともできます。

    mysql> pager less -n -i -S
    
  • 前の例の、-S オプションに注意してください。幅の広いクエリー結果のブラウズの際に非常に便利です。非常に幅の広い結果セットは、画面上では読みにくい場合があります。less に対して -S オプションを指定すると、左右の方向キーを使用して横にスクロールできるため、結果セットが読みやすくなります。また、-Sless 内でインタラクティブに使用して、水平方向のブラウズモードをオン/オフにできます。詳細は、less マニュアルページを参照してください。

    shell> man less
    
  • -F および -X オプションを less で使用すると、出力が 1 画面に収まる場合にプログラムを終了させることができ、これはスクロールが不要なときに便利です。

    mysql> pager less -n -i -S -F -X
    
  • クエリー出力の取り扱いに関する非常に複雑なページャーコマンドを指定できます。

    mysql> pager cat | tee /dr1/tmp/res.txt \
              | tee /dr2/tmp/res2.txt | less -n -i -S
    

    この例では、コマンドはクエリーの結果を /dr1 および /dr2 にマウントされた 2 つの異なるファイルシステムの 2 つの異なるディレクトリ内の 2 つのファイルに送信し、さらに less を使用して結果を画面に表示します。

tee 関数と pager 関数を組み合わせることもできます。tee ファイルを有効にし、pagerless に設定してあれば、less プログラムを使って結果をブラウズしつつ、同時にすべてをファイルに追加できます。pager コマンドと一緒に使用する Unix tee と、mysql に組み込みの tee コマンドの違いは、組み込みの tee は Unix tee がなくても機能するということです。また、組み込みの tee は画面に出力されるものすべてをログに記録しますが、pager と一緒に使用される Unix tee はそこまでログに記録しません。さらに、tee ファイルのロギングは mysql 内からインタラクティブにオン/オフできます。これは一部のクエリーのみをファイルにログするときに有効です。

prompt コマンドはデフォルトの mysql> プロンプトを再構成します。プロンプトを定義するための文字列には、次の特殊なシーケンスを含めることができます。

オプション 説明
\c ステートメントを発行するたびにインクリメントするカウンタ
\D 現在の日付 (フルで)
\d デフォルトデータベース
\h サーバーホスト
\l 現在の区切り文字
\m 現在の時間の分
\n 改行文字
\O 3 文字の形式の現在の月 (Jan、Feb、…)
\o 数字形式の現在の月
\P am/pm
\p 現在の TCP/IP ポートまたはソケットファイル
\R 現在の時間、24 時間表記 (0-23)
\r 現在の時間、12 時間表記 (1-12)
\S セミコロン
\s 現在の時間の秒
\t タブ文字
\U

完全な user_name@host_name アカウント名

\u ユーザー名
\v サーバーバージョン
\w 3 文字の形式の現在の曜日 (Mon, Tue, …)
\Y 現在の年 (4 桁)
\y 現在の年 (2 桁)
\_ スペース
\ スペース (バックスラッシュのあとにスペースがあります)
\' 単一引用符
\" 二重引用符
\\ リテラルの \ バックスラッシュ文字
\x

x (上記にないすべての x)

プロンプトはいくつかの方法でセットできます。

  • 環境変数を使用します。MYSQL_PS1 環境変数をプロンプト文字列に設定できます。例:

    shell> export MYSQL_PS1="(\u@\h) [\d]> "
    
  • コマンド行オプションを使用します。コマンド行で、--prompt オプションを mysql に設定できます。例:

    shell> mysql --prompt="(\u@\h) [\d]> "
    (user@host) [database]>
    
  • オプションファイルを使用します。prompt オプションを、ホームディレクトリの /etc/my.cnf または .my.cnf ファイルなど、任意の MySQL オプションファイルの [mysql] グループに設定できます。例:

    [mysql]
    prompt=(\\u@\\h) [\\d]>\\_
    

    この例では、バックスラッシュが 2 つあることに注意してください。オプションファイルで prompt オプションを使用してプロンプトを設定する場合、特別なプロンプトオプションを使用するときはバックスラッシュを 2 つ使用することをお勧めします。許可されるプロンプトオプションのセットと、オプションファイルで認識される特殊なエスケープシーケンスのセットには、重複があります。(オプションファイルでのエスケープシーケンスに関するルールはセクション4.2.6「オプションファイルの使用」にリストされています。)単一のバックスラッシュを使用している場合、この重複が問題となる可能性があります。たとえば、\s は現在の秒の値としてではなく、スペースとして解釈されます。次の例は、現在の時間を HH:MM:SS> 形式で含めるように、オプションファイルでプロンプトを定義する方法を示しています。

    [mysql]
    prompt="\\r:\\m:\\s> "
    
  • プロンプトをインタラクティブに設定します。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>
    

User Comments
  Posted by Rami Jamleh on April 5, 2011
this is a very useful prompt
prompt="\R:\m:\\s[\d](\l)> "
\R time 24 hours or use \\r instead for 12 hours
you can concatenate \\r with \P for am/pm
\m minutes
\\s seconds
\d current database
\l current delimiter

if your interested add \U not \u@\h for user and host
it's you who choose.
  Posted by Keith Shum on January 8, 2012
'prompt=\u@\h>\_' does not equal to 'prompt=\U>\_'

Since 'The server host' does not equal to 'host_name'... be careful! =)
Sign Up Login You must be logged in to post a comment.