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_name
DROP
oder
col_name
DROP 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
%
M
MOD(
.
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.