Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.1Mb
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


4.5.1.6 mysql のヒント

このセクションでは、mysql をさらに効果的に使用するテクニックを紹介します。

4.5.1.6.1 入力行の編集

mysql は入力行の編集をサポートし、現在の入力行を修正したり以前の入力行を呼び出したりできます。たとえば、「左矢印」キーおよび「右矢印」キーで現在の入力行内を横方向に移動し、「上矢印」キーおよび「下矢印」キーで以前に入力した行を上下に移動できます。「バックスペース」でカーソルの前の文字を削除でき、新しい文字を入力するとカーソルの位置に挿入されます。行を入力するには、「Enter」を押します。

Windows では、編集キーシーケンスはコンソールウィンドウでコマンドの編集に関してサポートされているものと同じです。Unix では、キーシーケンスは mysql のビルドに使用された入力ライブラリ (たとえば、libedit または readline ライブラリ) に依存します。

libedit ライブラリおよび readline ライブラリのドキュメントは、オンラインで入手できます。所定の入力ライブラリで許可されるキーシーケンスのセットを変更するには、ライブラリ起動ファイルでキーバインドを定義します。これはホームディレクトリにあるファイルで、.editrclibedit 用、.inputrcreadline 用です。

たとえば libedit では、Control+W は現在のカーソル位置の前にあるものをすべて削除し、Control+U は行全体を削除します。readline では、Control+W はカーソルの前の単語を削除し、Control+U は現在のカーソル位置の前にあるものをすべて削除します。mysqllibedit を使用してビルドされた場合は、これら 2 つのキーに関して readline の動作を好むユーザーは、.editrc ファイルに次の行を置くことができます (必要に応じてファイルを作成します)。

bind "^W" ed-delete-prev-word
bind "^U" vi-kill-line-prev

現在のキーバインドのセットを表示するには、一時的に bind のみの行を .editrc の最後に置きます。mysql は起動時にバインドを表示します。

4.5.1.6.2 Windows における Unicode のサポート

Windows は、コンソールからの読み取りおよび書き込みに、UTF-16LE に基づく API を提供します。MySQL 5.6.2 では、Windows の mysql クライアントはこれらの API を使用できます。5.6.3 では、Windows インストーラは MySQL メニューに MySQL command line client - Unicode という項目を作成します。この項目は、Unicode を使用して MySQL サーバーにコンソール経由で通信するように設定されたプロパティーで mysql クライアントを呼び出します。

このサポートを手動で利用するためには、互換性のある Unicode フォントを使用するコンソール内で mysql を実行し、デフォルト文字セットをサーバーとの通信でサポートされる Unicode 文字セットに設定します。

  1. コンソールウィンドウを開きます。

  2. コンソールウィンドウプロパティーに移動して「フォント」タブを選択し、Lucida Console またはその他の互換性のある Unicode フォントを選択します。コンソールウィンドウはデフォルトでは Unicode に不適切な DOS ラスターフォントを使用するため、これが必要です。

  3. mysql.exe--default-character-set=utf8 (または utf8mb4) オプションで実行します。utf16le は接続文字セットとしてはサポートされていないため、このオプションが必要です。

これらの変更により、mysql は Windows API を使用して、UTF-16LE を使用してコンソールと通信し、サーバーとは UTF-8 を使用して通信します。(前述のメニュー項目は、フォントと文字セットを今説明したように設定します。)

mysql を起動するたびにこれらのステップを実行しなくてもいいように、mysql.exe を呼び出すショートカットを作成できます。このショートカットは、コンソールフォントを Lucida Console またはその他の互換性のある Unicode フォントに設定し、--default-character-set=utf8 (または utf8mb4) オプションを mysql.exe に渡すようにしてください。

または、コンソールフォントの設定のみを行うショートカットを作成し、文字セットは my.ini ファイルの [mysql] グループで設定します。

[mysql]
default-character-set=utf8
4.5.1.6.3 クエリー結果を縦に表示する

クエリー結果の中には、縦表示の方が、通常の横向きの表形式よりもはるかに読みやすい場合があります。セミコロンの代わりに \G でクエリーを終了することで、クエリーを縦に表示できます。たとえば、多くの場合、改行を含む長いテキスト値は縦の出力の方がはるかに読みやすくなります。

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
Thimble> with UTF-8 or Unicode? Otherwise, I'll put this on my
Thimble> TODO list and see what happens.

Yes, please do that.

Regards,
Monty
     file: inbox-jani-1
     hash: 190402944
1 row in set (0.09 sec)
4.5.1.6.4 --safe-updates オプションの使用

初心者にとって、使いやすい起動オプションは --safe-updates (または同じ効果のある --i-am-a-dummy) です。これは DELETE FROM tbl_name ステートメントを発行したが、WHERE 句を忘れてしまった場合に役立ちます。通常、このようなステートメントはテーブルからすべての行を削除します。--safe-updates を使用すると、行を特定するキー値を指定しないと、行を消去できません。これにより、事故を予防します。

--safe-updates オプションを使用すると、mysql は MySQL サーバーに接続した際に次のステートメントを発行します。

SET sql_safe_updates=1, sql_select_limit=1000, max_join_size=1000000;

セクション5.1.4「サーバーシステム変数」を参照してください。

SET ステートメントには次の効果があります。

  • UPDATE ステートメントまたは DELETE ステートメントは、WHERE 句にキーの制約を指定するか、LIMIT 句を提供するか (または両方) しないかぎり実行を許可されません。例:

    UPDATE tbl_name SET not_key_column=val WHERE key_column=val;
    
    UPDATE tbl_name SET not_key_column=val LIMIT 1;
    
  • サーバーは、ステートメントに LIMIT 句が含まれていないかぎり、すべての大規模な SELECT の結果を 1,000 行に制限します。

  • サーバーは、1,000,000 を超える行の組み合わせを確認しなければいけない可能性のある、複数テーブルの SELECT ステートメントを中止します。

1,000 および 1,000,000 以外の制限を指定するには、--select_limit オプションおよび --max_join_size オプションを使用してデフォルトをオーバーライドできます。

shell> mysql --safe-updates --select_limit=500 --max_join_size=10000
4.5.1.6.5 mysql の自動再接続を無効にする

ステートメントの送信中にサーバーとの接続が切断された場合、mysql クライアントはただちに自動的にサーバーに一度再接続してステートメントを再度送信しようとします。ただし、mysql が再接続に成功しても、最初の接続は終了し、前セッションのオブジェクトと設定は失われます。この中には、一時テーブル、自動コミットモード、およびユーザー定義変数やセッション変数が含まれます。また、現トランザクションはロールバックします。この動作は危険な場合があります。たとえば、次の例では、サーバーはユーザーの了解なしに、最初のステートメントと 2 番目のステートメントの間にシャットダウンして再起動させられています。

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 がエラーで終了することが望ましい場合、mysql クライアントを --skip-reconnect オプションで起動できます。

自動再接続および再接続時の状態情報への影響の詳細は、セクション23.8.16「自動再接続動作の制御」を参照してください。


User Comments
  Posted by Tapesh Agarwal on April 4, 2009
Please be careful with '--safe-updates' mode. Though 'DELETE from table' is protected, but 'DROP Table' works withough any warning.
Sign Up Login You must be logged in to post a comment.