前の節の説明に従って、サーバーに接続していることを確認します。サーバーに接続しただけでは操作するデータベースは選択されていませんが、それでかまいません。この時点では、テーブルの作成、テーブルへのデータのロード、テーブルからのデータの取り出しに今すぐ進むのではなく、クエリーの発行方法を学ぶことが重要です。この節では、mysql の動作に習熟するために、いくつかのクエリーを使用してコマンド入力の基本原則について説明します。
サーバーにバージョン番号と現在の日付を照会する単純なコマンドを次に示します。mysql>
プロンプトに続いてこのとおりに入力し、Enter
を押します。
mysql> SELECT VERSION(), CURRENT_DATE;
+-----------------+--------------+
| VERSION() | CURRENT_DATE |
+-----------------+--------------+
| 5.1.2-alpha-log | 2005-10-11 |
+-----------------+--------------+
1 row in set (0.01 sec)
mysql>
このクエリーには、mysql に関するいくつかの事項が示されています。
通常、コマンドは SQL
ステートメントとそれに続くセミコロンで構成されます。(セミコロンを省略できる例外もいくつかあります。前述の
QUIT
もその 1
つです。ほかの例外についてはあとで説明します。)
ユーザーがコマンドを発行すると、mysql
はそのコマンドを実行のためにサーバーに送り、結果を表示します。次に、再度
mysql>
プロンプトを表示して、別のコマンドを入力できることを示します。
mysql は、クエリーの出力を表形式 (行とカラム) で表示します。最初の行には、カラムのラベルが表示されます。以降の行はクエリーの結果です。通常、カラムラベルは、データベーステーブルから取得されるカラムの名前です。この例のように、テーブルカラムではなく式の値を取得する場合、mysql ではカラムのラベルとして式自体が使用されます。
mysql では、返された行の数とクエリーの実行にかかった時間が表示されるため、サーバーの大まかなパフォーマンスがわかります。これらの値は、CPU 時間やマシン時間ではなく時計の時間で表されるため、また、サーバー負荷やネットワーク待ち時間などの要因に影響されるため、正確ではありません。(簡略化のために、この章のほかの例では「「セットの行数」」の行が省略されている場合もあります。)
キーワードは大文字でも小文字でも入力できます。次のクエリーは等価です。
mysql>SELECT VERSION(), CURRENT_DATE;
mysql>select version(), current_date;
mysql>SeLeCt vErSiOn(), current_DATE;
次に、別のクエリーを示します。これは、mysql を簡単なカリキュレータとして使用できることを示しています。
mysql> SELECT SIN(PI()/4), (4+1)*5;
+------------------+---------+
| SIN(PI()/4) | (4+1)*5 |
+------------------+---------+
| 0.70710678118655 | 25 |
+------------------+---------+
1 row in set (0.02 sec)
これまでに示したクエリーは、比較的に短い、1 行のステートメントでした。1 行に複数のステートメントを入力することもできます。各ステートメントの末尾にはセミコロンを付加してください。
mysql> SELECT VERSION(); SELECT NOW();
+-----------------+
| VERSION() |
+-----------------+
| 5.1.2-alpha-log |
+-----------------+
1 row in set (0.00 sec)
+---------------------+
| NOW() |
+---------------------+
| 2005-10-11 15:15:00 |
+---------------------+
1 row in set (0.00 sec)
1 つのコマンド全体を 1 行に入力する必要はないため、複数の行を必要とする長いコマンドでも問題ありません。mysql は、入力行の末尾を探すのではなく、終端のセミコロンを探すことによってステートメントの末尾を判定します。(つまり、mysql は自由形式の入力を受け入れます。入力行を収集しますが、セミコロンが見つかるまでは実行しません。)
次に、単純な複数行ステートメントを示します。
mysql>SELECT
->USER()
->,
->CURRENT_DATE;
+---------------+--------------+ | USER() | CURRENT_DATE | +---------------+--------------+ | jon@localhost | 2005-10-11 | +---------------+--------------+
この例では、複数行クエリーの最初の行を入力したあと、プロンプトが
mysql>
から
->
に変わることに注目してください。これは、mysql
がまだ完全なステートメントを検出しておらず、残りの入力を待機していることを示しています。プロンプトは貴重なフィードバックを提供してくれる味方です。そのフィードバックを使用すれば、mysql
が何を待機しているのかを、常に認識することができます。
入力途中のコマンドの実行を取り消すには、\c
と入力します。
mysql>SELECT
->USER()
->\c
mysql>
ここでもプロンプトに注目してください。\c
と入力したあと、プロンプトは
mysql>
に戻り、mysql
に新しいコマンドを入力できることを示します。
次の表に、表示される各プロンプトとそれらが示す mysql の状態をまとめます。
プロンプト | 意味 |
mysql> |
新しいコマンドを入力できます。 |
-> |
複数行コマンドの次の行を待機しています。 |
'> |
単一引用符 (「' 」)
で始まった文字列が完了するまで次の行を待機しています。 |
"> |
二重引用符 (「" 」)
で始まった文字列が完了するまで次の行を待機しています。 |
`> |
逆引用符 (「` 」)
で始まった識別子が完了するまで次の行を待機しています。 |
/*> |
/*
で始まったコメントが完了するまで次の行を待機しています。 |
一般に、1 行のコマンドを発行しようとして終端のセミコロンを忘れると、複数行ステートメントが発生します。この場合、mysql は追加の入力を待機します。
mysql> SELECT USER()
->
これが発生すると、ユーザーはステートメントを入力したのに
->
プロンプトしか返ってこないと思うでしょうが、多くの場合
mysql
はセミコロンを待機しています。プロンプトの意味に気付かなければ、何をすべきか理解するまでに時間がかかるかもしれません。セミコロンを入力してステートメントを完了すると、mysql
で実行されます。
mysql>SELECT USER()
->;
+---------------+ | USER() | +---------------+ | jon@localhost | +---------------+
'>
プロンプトと
">
プロンプトは、文字列の収集中 (つまり、MySQL
が文字列の完了を待機しているとき)
に表示されます。MySQL
では、「'
」
文字または
「"
」
文字で囲んで文字列を記述でき
(たとえば、'hello'
や
"goodbye"
など)、mysql
では、複数行にわたって文字列を入力することができます。'>
プロンプトまたは ">
プロンプトが表示された場合は、入力した行に「'
」または「"
」引用符で始まる文字列が含まれているが、まだ対応する引用符で終わっていないことを示しています。このような場合、引用符の入力を忘れていることがよくあります。例
:
mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'>
この SELECT
ステートメントを入力し、Enter
を押して結果を待っても、何も起きません。このクエリーに長い時間がかかっている理由を思案する代わりに、'>
プロンプトで示されているヒントに注目してください。このプロンプトは、mysql
が完了していない文字列の残りを待機していることを示しています。(このステートメントの間違いに気付きましたか。文字列
'Smith
には、2
つめの単一引用符がありません。)
では、どうしますか。もっとも簡単なのは、コマンドを取り消すことです。ただし、この場合は単に
\c
と入力することはできません。なぜなら、mysql
で収集中の文字列の一部と見なされるからです。代わりに、閉じる引用符を入力して
(つまり、文字列が完了したことを
mysql に認識させ)、次に
\c
と入力します。
mysql>SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'>'\c
mysql>
プロンプトは mysql>
に戻り、mysql
に新しいコマンドを入力できることを示します。
`>
プロンプトは
'>
および
">
プロンプトと似ていますが、逆引用符で始まった識別子が完了していないことを示します。
'>
、">
、および
`>
の各プロンプトの意味を理解することが重要です。文字列を閉じるのを忘れると、そのあとに入力する行はすべて、たとえば
QUIT
と入力しても、mysql
で無視されるように見えます。特に、現在のコマンドを取り消すにはまず終端の引用符を入力する必要があることを理解していないと、これにはかなり困惑する可能性があります。