Stellen Sie zunächst wie im vorhergehenden Abschnitt beschrieben eine Verbindung zum Server her. Durch diesen Vorgang wird noch keine Datenbank ausgewählt, was aber noch nicht problematisch ist. Wir wollen erst einmal sehen, wie man Abfragen absetzt, statt gleich mit den eigentlichen Datenbankfunktionen – dem Erstellen von Tabellen und dem Einladen von Daten in bzw. Abrufen dieser Daten aus den Tabellen – anzufangen. Dieser Abschnitt erläutert die Grundprinzipien der Befehlseingabe mithilfe verschiedener Abfragen, die Sie ausprobieren können, um sich mit der Funktionsweise von mysql vertraut zu machen.
Hier zunächst ein einfacher Befehl, der den Server bittet, seine
Versionsnummer und das aktuelle Datum anzugeben. Geben Sie den
Befehl wie hier gezeigt an der Eingabeaufforderung
mysql>
ein und betätigen Sie dann die
Eingabetaste:
mysql> SELECT VERSION(), CURRENT_DATE;
+-----------------+--------------+
| VERSION() | CURRENT_DATE |
+-----------------+--------------+
| 5.1.2-alpha-log | 2005-10-11 |
+-----------------+--------------+
1 row in set (0.01 sec)
mysql>
Diese Abfrage veranschaulicht mehrere Aspekte von mysql:
Ein Befehl besteht normalerweise aus einer SQL-Anweisung
gefolgt von einem Semikolon. (Es gibt eine Reihe von
Ausnahmen, bei denen das Semikolon weggelassen werden kann.
Ein Beispiel ist das bereits weiter oben erwähnte
QUIT
; weitere werden folgen.)
Wenn Sie einen Befehl absetzen, sendet
mysql ihn zur Ausführung an den Server und
zeigt die Ergebnisse an. Darauf folgt wieder eine neue
Eingabeaufforderung mysql>
, mit der
angezeigt wird, dass nun ein neuer Befehl eingegeben werden
kann.
mysql zeigt die Abfrageausgabe in Tabellenform (d. h. als Zeilen und Spalten) an. Die erste Zeile enthält die Spaltenüberschriften. Alle nachfolgenden Zeilen sind Abfrageergebnisse. Normalerweise sind Spaltenüberschriften die Namen der Spalten, die aus den Datenbanktabellen abgerufen werden. Wenn Sie den Wert eines Ausdrucks statt einer Tabellenspalte (wie im obigen Beispiel) abrufen, beschriftet mysql die Spalte mit dem Ausdruck selbst.
mysql zeigt an, wie viele Datensätze (Zeilen) zurückgegeben wurden und wie lange die Ausführung der Abfrage dauerte; hierdurch können Sie grob auf die Serverleistung schließen. Die Werte sind allerdings nicht sehr genau, denn sie geben nur eine normale Zeit statt der Prozessor- oder Systemzeit an, die zudem durch Faktoren wie der Serverauslastung und der Netzwerklatenz beeinflusst wird. (Aus Gründen der Übersichtlichkeit haben wir die Zeile „rows in set“ in einigen der in diesem Kapitel aufgeführten Beispiele weggelassen.)
Schlüsselwörter können in beliebiger Groß-/Kleinschreibung angegeben werden. Die folgenden Abfragen sind gleichwertig:
mysql>SELECT VERSION(), CURRENT_DATE;
mysql>select version(), current_datum;
mysql>SeLeCt vErSiOn(), current_DATE;
Es folgt eine weitere Abfrage. Sie veranschaulicht, wie man mysql als einfachen Taschenrechner verwenden kann:
mysql> SELECT SIN(PI()/4), (4+1)*5;
+------------------+---------+
| SIN(PI()/4) | (4+1)*5 |
+------------------+---------+
| 0.70710678118655 | 25 |
+------------------+---------+
1 row in set (0.02 sec)
Die bislang gezeigten Abfragen waren vergleichsweise kurze, einzeilige Anweisungen. Sie können aber auch mehrere Anweisungen in eine Zeile schreiben. Schließen Sie sie jeweils mit einem Semikolon ab:
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)
Ein Befehl muss nicht vollständig innerhalb einer einzelnen Zeile angegeben werden; insofern stellen auch längere Befehle über mehrere Zeilen kein Problem dar. mysql ermittelt das Ende Ihrer Anweisung anhand des schließenden Semikolons und nicht auf der Basis der Eingabezeile. (Anders gesagt, akzeptiert mysql frei formatierte Eingaben: Alle Eingabezeilen werden gesammelt, die Ausführung erfolgt aber erst, nachdem das Semikolon erkannt wurde.)
Hier ist eine einfache mehrzeilige Anweisung:
mysql>SELECT
->USER()
->,
->CURRENT_DATE;
+---------------+--------------+ | USER() | CURRENT_DATE | +---------------+--------------+ | jon@localhost | 2005-10-11 | +---------------+--------------+
Beachten Sie in diesem Beispiel, wie die Eingabeaufforderung von
mysql>
auf ->
umschaltet, nachdem Sie die erste Zeile einer mehrzeiligen Abfrage
eingegeben haben. Auf diese Weise zeigt mysql
an, dass noch keine vollständige Anweisung erkannt wurde und
weitere Eingaben erwartet werden. Diese Form der
Eingabeaufforderung ist sehr praktisch, denn sie erlaubt
Rückschlüsse auf erforderliche Eingaben. Sie wissen also immer,
worauf mysql gerade wartet.
Wenn Sie einen Befehl, den Sie gerade eingeben, doch nicht
ausführen wollen, können Sie ihn durch Eingabe von
\c
abbrechen:
mysql>SELECT
->USER()
->\c
mysql>
Beachten Sie auch hier die Eingabeaufforderung. Sie schaltet
zurück auf mysql>
, nachdem Sie
\c
eingegeben haben. So wird angezeigt, dass
mysql auf einen neuen Befehl wartet.
Die folgende Tabelle zeigt alle Eingabeaufforderungen, auf die Sie treffen können, und fasst ferner zusammen, welche Rückschlüsse sie jeweils bezüglich des Zustandes von mysql erlauben.
Eingabeaufforderung | Bedeutung |
mysql> |
Bereit für einen neuen Befehl. |
-> |
Erwartet die nächste Zeile einer mehrzeiligen Befehlseingabe. |
'> |
Erwartet die nächste Zeile und die Vervollständigung eines Strings,
der mit einem einfachen Anführungszeichen
(‘' ’) begonnen wurde. |
"> |
Erwartet die nächste Zeile und die Vervollständigung eines Strings,
der mit einem doppelten Anführungszeichen
(‘" ’) begonnen wurde. |
`> |
Erwartet die nächste Zeile und die Vervollständigung eines
Bezeichners, der mit einem Backtick
(‘` ’) begonnen wurde. |
/*> |
Erwartet die nächste Zeile und die Vervollständigung eines Kommentars,
der mit /* begonnen wurde. |
Mehrzeilige Anweisungen treten häufig ungewollt auf, wenn Sie eigentlich nur einen einzeiligen Befehl absetzen wollen, aber das abschließende Semikolon vergessen. In diesem Fall erwartet mysql eine weitere Eingabe:
mysql> SELECT USER()
->
Wenn das geschieht (d. h., wenn Sie glauben, dass Sie einen
vollständigen Befehl eingegeben haben, aber die
Eingabeaufforderung ->
erscheint), dann
wartet mysql in aller Regel auf das Semikolon.
Bemerken Sie nicht sofort, welche Eingabeaufforderung hier
angezeigt wird, dann sitzen Sie womöglich eine Zeit lang vor dem
Computer, bevor Sie feststellen, was passiert ist. Geben Sie
einfach ein Semikolon ein, um die Anweisung abzuschließen – sie
wird dann von mysql ausgeführt:
mysql>SELECT USER()
->;
+---------------+ | USER() | +---------------+ | jon@localhost | +---------------+
Die Eingabeaufforderungen '>
und
">
erscheinen bei der Erfassung von Strings
(MySQL erwartet also die Vervollständigung eines Strings). In
MySQL können Sie Strings entweder in
‘'
’ oder
‘"
’ setzen (z. B.
'hello'
oder "goodbye"
).
mysql erlaubt die Eingabe von Strings, die sich
über mehrere Zeilen erstrecken. Wenn Sie die Eingabeaufforderung
'>
oder ">
sehen,
bedeutet dies, dass Sie eine Zeile mit einem String eingegeben
haben, der mit dem Anführungszeichen
‘'
’ oder
‘"
’ beginnt, diesen String aber
noch nicht mit dem zugehörigen schließenden Anführungszeichen
beendet haben. Hierdurch ist häufig erkennbar, dass Sie ein
Anführungszeichen einzugeben vergessen haben. Ein Beispiel:
mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'>
Wenn Sie diese SELECT
-Anweisung eingeben und
dann die Eingabetaste betätigen, werden Sie eine Zeit lang
warten, ohne dass etwas passiert. Wenn Sie sich wundern, warum die
Verarbeitung der Abfrage so lange dauert, werden Sie bald
feststellen, dass die Eingabeaufforderung '>
angezeigt wird. Sie besagt, dass mysql den Rest
eines nicht abgeschlossenen Strings erwartet. (Erkennen Sie den
Fehler in der Anweisung? Beim String 'Smith
fehlt das zweite einzelne Anführungszeichen.)
Was können Sie nun tun? Die einfachste Möglichkeit besteht
darin, den Befehl abzubrechen. Sie können in diesem Fall aber
nicht einfach \c
eingeben, da
mysql dies als Teil des Strings interpretieren
würde, den Sie vermeintlich eingeben. Geben Sie stattdessen
zuerst das schließende Anführungszeichen (damit
mysql weiß, dass der String abgeschlossen ist)
und erst dann \c
ein:
mysql>SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'>'\c
mysql>
Die Eingabeaufforderung schaltet nun auf
mysql>
zurück und zeigt so an, dass
mysql für einen neuen Befehl bereit ist.
Die Eingabeaufforderung `>
ähnelt
'>
und ">
, gibt aber
an, dass Sie mit einem Backtick einen Bezeichner begonnen, aber
noch nicht beendet haben.
Zu wissen, was die Eingabeaufforderungen '>
,
">
und `>
bedeuten,
ist wichtig, denn wenn Sie versehentlich einen nicht
abgeschlossenen String eingeben, werden alle nachfolgend
eingegebenen Zeilen von mysql ignoriert –
einschließlich der Zeile mit dem Befehl QUIT
.
Dies kann insbesondere dann recht verwirrend sein, wenn Sie nicht
wissen, dass Sie ein schließendes Anführungszeichen eingeben
müssen, bevor Sie den aktuellen Befehl abbrechen können.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.