MySQL Server unterstützt einige Erweiterungen, die Sie in anderen Datenbankmanagementsystemen wahrscheinlich nicht finden werden. Beachten Sie in jedem Fall, dass, wenn Sie diese Erweiterungen verwenden, Ihr Code nicht auf andere SQL-Server portierbar ist. In manchen Fällen können Sie Code schreiben, der MySQL-Erweiterungen enthält, aber trotzdem portierbar ist; Sie müssen dann Kommentare in der folgenden Form verwenden:
/*! MySQL-specific code */
In diesem Fall verarbeitet MySQL Server den Code innerhalb des
Kommentars wie normale SQL-Anweisungen; andere SQL-Server
hingegen ignorieren die Erweiterungen. So erkennt MySQL Server
beispielsweise anders als andere Server das Schlüsselwort
STRAIGHT_JOIN in der folgenden Anweisung:
SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...
Wenn Sie nach dem Zeichen ‘!’ die
Versionsnummer angeben, wird die Syntax nur ausgeführt, wenn
die betreffende oder eine neuere MySQL-Version verwendet wird.
Das Schlüsselwort TEMPORARY im folgenden
Kommentar wird nur von Servern ausgeführt, auf denen MySQL
3.23.02 oder höher läuft:
CREATE /*!32302 TEMPORARY */ TABLE t (a INT);
Die folgenden Beschreibungen listen MySQL-Erweiterungen nach Kategorie sortiert auf.
Organisation der Daten auf der Festplatte
MySQL Server ordnet jede Datenbank einem Unterverzeichnis des MySQL-Datenverzeichnisses zu. Tabellen innerhalb einer Datenbank entsprechen den Dateinamen im Datenbankverzeichnis. Dies hat einige Auswirkungen:
Die Groß-/Kleinschreibung bei Datenbank- und Tabellennamen in MySQL Server wird bei solchen Betriebssystemen unterschieden, die auch eine Unterscheidung der Groß-/Kleinschreibung bei den Dateinamen vornehmen (also etwa die Mehrzahl der Unix-Systeme). Siehe auch Abschnitt 9.2.2, „Groß-/Kleinschreibung in Namen“.
Sie können Standardsystembefehle zum Sichern,
Umbenennen, Verschieben, Löschen und Kopieren von
Tabellen verwenden, die von der
MyISAM-Speicher-Engine verwaltet
werden. So können Sie eine
MyISAM-Tabelle etwa umbenennen, indem
Sie die Namen der .MYD-,
.MYI- und
.frm-Dateien ändern, denen die
Tabelle entspricht. (Nichtsdestoweniger ist die
Verwendung von RENAME TABLE bzw.
ALTER TABLE ... RENAME und die
Umbenennung der Dateien durch den Server vorzuziehen.)
Datenbank- und Tabellennamen dürfen keine Pfadtrennzeichen
(‘/’,
‘\’) enthalten.
Allgemeine Sprachsyntax
Standardmäßig dürfen Strings von den Zeichen
‘"’ oder
‘'’ umschlossen sein
und nicht nur von
‘'’. (Wenn der
SQL-Modus ANSI_QUOTES aktiviert ist,
dürfen die Strings nur vom Zeichen
‘'’ umfasst sein;
Strings, die von ‘"’
umfasst sind, interpretiert der Server als Bezeichner.)
Verwendung von ‘\’ als
Escape-Zeichen in Strings.
In SQL-Anweisungen können Sie mithilfe der Syntax
db_name.tbl_name auf Tabellen
aus anderen Datenbanken zugreifen. Einige SQL-Server
bieten die gleiche Funktionalität, nennen dies aber
User-Space. MySQL Server unterstützt
Tabellenräume, wie sie etwa in der folgenden Anweisung
verwendet werden, nicht: CREATE TABLE
ralph.my_table...IN my_tablespace.
SQL-Anweisungssyntax
Die Anweisungen ANALYZE TABLE,
CHECK TABLE, OPTIMIZE
TABLE und REPAIR TABLE.
Die Anweisungen CREATE DATABASE,
DROP DATABASE und ALTER
DATABASE. Siehe auch
Abschnitt 13.1.3, „CREATE DATABASE“,
Abschnitt 13.1.6, „DROP DATABASE“, und
Abschnitt 13.1.1, „ALTER DATABASE“.
Die Anweisung DO.
EXPLAIN SELECT ruft eine Beschreibung
dazu auf, wie Tabellen durch die Abfrageoptimierung
verarbeitet werden.
Die Anweisungen FLUSH und
RESET.
Die Anweisung SET. Siehe auch
Abschnitt 13.5.3, „SET“.
Die Anweisung SHOW. Siehe auch
Abschnitt 13.5.4, „SHOW“. Ab MySQL 5.0 lassen sich die
Angaben, die von vielen der MySQL-spezifischen
SHOW-Anweisungen erzeugt werden, auf
standardkonformere Weise durch Verwendung von
SELECT zur Abfrage von
INFORMATION_SCHEMA erhalten. Siehe
auch Kapitel 22, Die Datenbank INFORMATION_SCHEMA.
Verwenden von LOAD DATA INFILE. In
vielen Fällen ist die Syntax kompatibel mit Oracles
LOAD DATA INFILE. Siehe auch
Abschnitt 13.2.5, „LOAD DATA INFILE“.
Verwendung von RENAME TABLE. Siehe
auch Abschnitt 13.1.9, „RENAME TABLE“.
Verwendung von REPLACE anstelle der
Kombination DELETE und
INSERT. Siehe auch
Abschnitt 13.2.6, „REPLACE“.
Verwendung von CHANGE
,
col_nameDROP
oder
col_nameDROP INDEX, IGNORE
oder RENAME in ALTER
TABLE-Anweisungen. Verwendung mehrerer
ADD-, ALTER-,
DROP- oder
CHANGE-Klauseln in einer
ALTER TABLE-Anweisung. Siehe auch
Abschnitt 13.1.2, „ALTER TABLE“.
Verwendung von Indexnamen, Indizes für das Präfix
einer Spalte und Verwendung von INDEX
oder KEY in CREATE
TABLE-Anweisungen. Siehe auch
Abschnitt 13.1.5, „CREATE TABLE“.
Verwendung von TEMPORARY oder
IF NOT EXISTS mit CREATE
TABLE.
Verwendung von IF EXISTS mit
DROP TABLE und DROP
DATABASE.
Die Möglichkeit, mehrere Tabellen mit einer einzigen
DROP TABLE-Anweisung zu löschen.
Die Klauseln ORDER BY und
LIMIT der Anweisungen
UPDATE und DELETE.
Die Syntax INSERT INTO ... SET
.
col_name = ...
Die Klausel DELAYED der Anweisungen
INSERT und
REPLACE.
Die Klausel LOW_PRIORITY der
Anweisungen INSERT,
REPLACE, DELETE
und UPDATE.
Verwendung von INTO OUTFILE oder
INTO DUMPFILE in
SELECT-Anweisungen. Siehe auch
Abschnitt 13.2.7, „SELECT“.
Optionen wie STRAIGHT_JOIN oder
SQL_SMALL_RESULT in
SELECT-Anweisungen.
In der Klausel GROUP BY müssen Sie
nicht alle gewählten Spalten benennen. Hierdurch
erhalten Sie eine bessere Leistung bei einigen sehr
speziellen, aber trotzdem recht häufig auftretenden
Abfragen. Siehe auch
Abschnitt 12.11, „Funktionen und Modifizierer für die Verwendung in GROUP
BY-Klauseln“.
Sie können ASC und
DESC mit GROUP BY
und nicht nur mit ORDER BY festlegen.
Die Möglichkeit, Variablen in einer Anweisung mit dem
Zuweisungsoperator := festzulegen:
mysql>SELECT @a:=SUM(total),@b=COUNT(*),@a/@b AS avg->FROM test_table;mysql>SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
Datentypen
Die Datentypen MEDIUMINT,
SET und ENUM sowie
die verschiedenen BLOB- und
TEXT-Datentypen.
Die Datentypattribute AUTO_INCREMENT,
BINARY, NULL,
UNSIGNED und
ZEROFILL.
Funktionen und Operatoren
Um Benutzern anderer SQL-Umgebungen den Umstieg auf MySQL zu erleichtern, unterstützt MySQL Server Aliase für eine Reihe von Funktionen. So unterstützen etwa alle String-Funktionen sowohl die Standard-SQL- als auch die ODBC-Syntax.
MySQL Server fasst die Operatoren ||
und && als logisches ODER
bzw. UND auf, wie man es von der Programmiersprache C
her kennt. In MySQL Server sind ||
und OR Synonyme; Gleiches gilt für
&& und
AND. Aufgrund dieser praktischen
syntaktischen Eigenschaften unterstützt MySQL Server
den Standard-SQL-Operator || für die
String-Verkettung nicht; verwenden Sie stattdessen
CONCAT(). Da
CONCAT() eine beliebige Anzahl von
Argumenten entgegennimmt, ist es ganz einfach, die
Verwendung des Operators || in MySQL
Server nachzubilden.
Verwendung von COUNT(DISTINCT
, wobei
value_list)value_list mehr als ein
Element aufweist.
Standardmäßig wird bei String-Vergleichen die
Groß-/Kleinschreibung unterschieden, wobei die
Sortierreihenfolge vom aktuellen Zeichensatz bestimmt
wird; dieser ist vorgabeseitig latin1
(cp1252 West European). Wenn Sie das nicht wollen,
sollten Sie Ihre Spalten mit dem Attribut
BINARY deklarieren oder
BINARY zur Umwandlung verwenden, was
Vergleiche auf der Basis des zugrunde liegenden
Zeichensatzes (statt der lexikalischen Anordnung)
ermöglicht.
Der Operator % ist ein Synonym zu
MOD(). Infolgedessen ist
gleichbedeutend
mit
N %
MMOD(.
N,M)% wird für C-Programmierer und aus
Gründen der Kompatibilität mit PostgreSQL
unterstützt.
Die Operatoren =,
<>,
<=,<,
>=,>,
<<,
>>,
<=>, AND,
OR und LIKE
können in Ausdrücken in der Ausgabespaltenliste (links
von FROM) in
SELECT-Anweisungen verwendet werden.
Ein Beispiel:
mysql> SELECT col1=1 AND col2=2 FROM my_table;
Die Funktion LAST_INSERT_ID() gibt
den aktuellen AUTO_INCREMENT-Wert
zurück. Siehe auch
Abschnitt 12.10.3, „Informationsfunktionen“.
LIKE ist für numerische Werte
zulässig.
Die Operatoren REGEXP and
NOT REGEXP für erweiterte reguläre
Ausdrücke.
CONCAT() oder
CHAR() mit einem oder mehr als zwei
Argumenten. (In MySQL Server können diese Funktionen
eine variable Anzahl von Argumenten entgegennehmen.)
Die Funktionen BIT_COUNT(),
CASE, ELT(),
FROM_DAYS(),
FORMAT(), IF(),
PASSWORD(),
ENCRYPT(), MD5(),
ENCODE(),
DECODE(),
PERIOD_ADD(),
PERIOD_DIFF(),
TO_DAYS() und
WEEKDAY().
Verwendung von TRIM() zum
Zurechtschneiden von Teil-Strings. Standard-SQL
unterstützt nur die Entfernung einzelner Zeichen.
Die GROUP BY-Funktionen
STD(), BIT_OR(),
BIT_AND(),
BIT_XOR() und
GROUP_CONCAT(). Siehe auch
Abschnitt 12.11, „Funktionen und Modifizierer für die Verwendung in GROUP
BY-Klauseln“.
Eine priorisierte Liste mit Angaben dazu, wann MySQL Server durch neue Erweiterungen ergänzt wird, finden Sie im MySQL-Entwicklungsfahrplan unter http://dev.mysql.com/doc/mysql/en/roadmap.html.
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.
