MySQL 8.0 リファレンスマニュアル


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 the current input statement.
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.
resetconnection(\x) Clean session context.
query_attributes(\) Sets string parameters (name1 value1 name2 value2 ...)
for the next query to pick up.

For server side help, type 'help contents'

--binary-mode オプションを指定して mysql を起動すると、非対話モード (mysql にパイプされた入力または source コマンドを使用してロードされた入力の場合) の charset および delimiter を除き、すべての mysql コマンドが無効になります。

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

複数行の/* ... */コメント内でのショートフォームコマンドの使用はサポートされていません。 ショートフォームコマンドは、オブジェクト定義に格納されている/*+ ... */オプティマイザヒントコメントと同様に、単一行の/*! ... */バージョンコメント内で機能します。 オプティマイザヒントのコメントがオブジェクト定義に格納され、mysql でリロードされたときにダンプファイルによってそのようなコマンドが実行されることが懸念される場合は、--binary-mode オプションを指定して mysql を起動するか、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]]

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

    connect コマンドでホスト名引数が指定されている場合、そのホストは mysql の起動時に指定された --dns-srv-name オプションよりも優先され、DNS SRV レコードが指定されます。

  • delimiter str, \d str

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

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

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

    mysql によって認識される区切り文字がデフォルトの ; 以外の何かに設定されている場合、その文字のインスタンスは解釈されずにサーバーに送信されます。 しかし、サーバー自体は引き続き ; をステートメントの区切り文字として解釈し、その解釈に従ってステートメントを処理します。 サーバー側でのこの動作は、複数ステートメントの実行 (Multiple Statement Execution Supportを参照してください) や、ストアドプロシージャーおよび関数の本体、トリガー、およびイベントの解析 (セクション25.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> にリセットします。

  • query_attributes name value [name value ...]

    サーバーに送信される次のクエリーに適用されるクエリー属性を定義します。 クエリー属性の目的および使用方法の詳細は、セクション9.6「クエリー属性」 を参照してください。

    query_attributes コマンドは、次のルールに従います:

    • 属性名および値の書式および引用符のルールは、delimiter コマンドの場合と同じです。

    • このコマンドでは、最大 32 個の属性名/値のペアが許可されます。 名前と値の長さは最大 1024 文字です。 値を指定せずに名前を指定すると、エラーが発生します。

    • クエリーの実行前に複数の query_attributes コマンドが発行された場合は、最後のコマンドのみが適用されます。 クエリーの送信後、mysql は属性セットをクリアします。

    • 複数の属性が同じ名前で定義されている場合、属性値を取得しようとすると未定義の結果になります。

    • 空の名前で定義された属性は名前で取得できません。

    • mysql によるクエリーの実行中に再接続が発生した場合、mysql は再接続後に属性をリストアし、同じ属性を使用してクエリーを再度実行できるようにします。

  • quit, \q

    mysql を終了します。

  • rehash, \#

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

  • resetconnection, \x

    接続をリセットしてセッションステートをクリアします。 これには、query_attributes コマンドを使用して定義された現在のクエリー属性のクリアが含まれます。

    接続をリセットすると、mysql_change_user() または自動再接続に似た効果がありますが、接続がクローズされて再オープンされず、再認証が行われない点が異なります。 mysql_change_user()およびAutomatic Reconnection Controlを参照してください。

    この例では、resetconnection がセッションステートに保持されている値をクリアする方法を示します:

    mysql> SELECT LAST_INSERT_ID(3);
    +-------------------+
    | LAST_INSERT_ID(3) |
    +-------------------+
    |                 3 |
    +-------------------+
    
    mysql> SELECT LAST_INSERT_ID();
    +------------------+
    | LAST_INSERT_ID() |
    +------------------+
    |                3 |
    +------------------+
    
    mysql> resetconnection;
    
    mysql> SELECT LAST_INSERT_ID();
    +------------------+
    | LAST_INSERT_ID() |
    +------------------+
    |                0 |
    +------------------+
  • source file_name, \. file_name

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

    引用符は、ファイル名自体の一部として使用されます。 最良の結果を得るには、名前に空白文字を含めないでください。

  • status, \s

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

  • system command, \! command

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

    MySQL 8.0.19 より前は、system コマンドは Unix でのみ機能します。 8.0.19 では、Windows でも動作します。

  • 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 現在の接続識別子
\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.2.2「オプションファイルの使用」にリストされています。) 単一のバックスラッシュを使用している場合、この重複が問題となる可能性があります。 たとえば、\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>

関連キーワード:  コマンド, サーバー, 文字, プログラム, ステートメント, 接続, pager, 表示, クエリー, 実行