Ein häufig auftretendes Problem liegt vor, wenn Sie einen
Bezeichner (z. B. einen Tabellen- oder Datenbanknamen) verwenden
wollen, der ein reserviertes Wort wie SELECT
oder den Namen eines werksseitig vorhandenen MySQL-Datentyps oder
einer Funktion wie TIMESTAMP
oder
GROUP
enthält.
Wenn ein Bezeichner ein reserviertes Wort ist, müssen Sie ihn wie in Abschnitt 9.2, „Datenbank-, Tabellen-, Index-, Spalten- und Aliasnamen“, beschrieben in Anführungszeichen setzen. Ausnahme: Ein Wort, das auf einen Punkt in einem qualifizierten Namen folgt, muss ein Bezeichner sein; es muss also auch dann nicht in Anführungszeichen gesetzt werden, wenn es sich um ein reserviertes Wort handelt.
Funktionsnamen dürfen Sie als Bezeichner verwenden.
Beispielsweise ist ABS
als Spaltenname
zulässig. Standardmäßig ist nämlich bei Funktionsaufrufen kein
Whitespace zwischen dem Funktionsnamen und dem nachfolgenden
Zeichen ‘(
’ zulässig; auf diese
Weise kann ein Funktionsaufruf von der Referenzierung eines
Spaltennamens unterschieden werden.
Eine Begleiterscheinung dieses Verhaltens besteht darin, dass das Weglassen eines Leerzeichens in manchen Kontexten dazu führen kann, dass ein Bezeichner als Funktionsname interpretiert wird. Folgende Anweisung beispielsweise ist zulässig:
mysql> CREATE TABLE abs (val INT);
Das Weglassen des Leerzeichens nach abs
verursacht einen Syntaxfehler, da die Anweisung in diesem Fall die
Funktion ABS()
aufzurufen scheint:
mysql> CREATE TABLE abs(val INT);
ERROR 1064 (42000) at line 2: You have an error in your SQL
syntax ... near 'abs(val INT)'
Ist der SQL-Modus IGNORE_SPACE
aktiviert, dann
gestattet der Server bei Funktionsaufrufen das Vorhandensein von
Whitespace zwischen dem Funktionsnamen und dem nachfolgenden
Zeichen ‘(
’. Hierdurch werden
Funktionsnamen als reservierte Wörter behandelt. Infolgedessen
müssen Bezeichner, die mit Funktionsnamen identisch sind, wie in
Abschnitt 9.2, „Datenbank-, Tabellen-, Index-, Spalten- und Aliasnamen“, beschrieben in Anführungszeichen
gesetzt werden. Wie der SQL-Modus des Servers gesteuert wird,
entnehmen Sie Abschnitt 5.2.5, „Der SQL-Modus des Servers“.
Die Wörter in der folgenden Tabelle sind explizit für MySQL
5.1 reserviert. Für den Fall, dass Sie später
einmal auf eine höhere Version zu aktualisieren beabsichtigen,
sollten Sie auch solche Wörter beachten, die in Zukunft
reserviert sein werden. Sie finden diese in den Handbüchern zu
höheren MySQL-Versionen. Die meisten der Wörter in der Tabelle
sind in Standard-SQL als Spalten- oder Tabellennamen unzulässig
(z. B. GROUP
). Einige der Wörter sind auch
reserviert, weil MySQL sie benötigt und (derzeit) einen
yacc-Parser verwendet. Ein reserviertes Wort
darf als Bezeichner verwendet werden, wenn Sie es in
Anführungszeichen setzen.
ACCESSIBLE |
ADD |
ALL |
ALTER |
ANALYZE |
AND |
AS |
ASC |
ASENSITIVE |
BEFORE |
BETWEEN |
BIGINT |
BINARY |
BLOB |
BOTH |
BY |
CALL |
CASCADE |
CASE |
CHANGE |
CHAR |
CHARACTER |
CHECK |
COLLATE |
COLUMN |
CONDITION |
CONSTRAINT |
CONTINUE |
CONVERT |
CREATE |
CROSS |
CURRENT_DATE |
CURRENT_TIME |
CURRENT_TIMESTAMP |
CURRENT_USER |
CURSOR |
DATABASE |
DATABASES |
DAY_HOUR |
DAY_MICROSECOND |
DAY_MINUTE |
DAY_SECOND |
DEC |
DECIMAL |
DECLARE |
DEFAULT |
DELAYED |
DELETE |
DESC |
DESCRIBE |
DETERMINISTIC |
DISTINCT |
DISTINCTROW |
DIV |
DOUBLE |
DROP |
DUAL |
EACH |
ELSE |
ELSEIF |
ENCLOSED |
ESCAPED |
EXISTS |
EXIT |
EXPLAIN |
FALSE |
FETCH |
FLOAT |
FLOAT4 |
FLOAT8 |
FOR |
FORCE |
FOREIGN |
FROM |
FULLTEXT |
GRANT |
GROUP |
HAVING |
HIGH_PRIORITY |
HOUR_MICROSECOND |
HOUR_MINUTE |
HOUR_SECOND |
IF |
IGNORE |
IN |
INDEX |
INFILE |
INNER |
INOUT |
INSENSITIVE |
INSERT |
INT |
INT1 |
INT2 |
INT3 |
INT4 |
INT8 |
INTEGER |
INTERVAL |
INTO |
IS |
ITERATE |
JOIN |
KEY |
KEYS |
KILL |
LEADING |
LEAVE |
LEFT |
LIKE |
LIMIT |
LINEAR |
LINES |
LOAD |
LOCALTIME |
LOCALTIMESTAMP |
LOCK |
LONG |
LONGBLOB |
LONGTEXT |
LOOP |
LOW_PRIORITY |
MASTER_SSL_VERIFY_SERVER_CERT |
MATCH |
MEDIUMBLOB |
MEDIUMINT |
MEDIUMTEXT |
MIDDLEINT |
MINUTE_MICROSECOND |
MINUTE_SECOND |
MOD |
MODIFIES |
NATURAL |
NOT |
NO_WRITE_TO_BINLOG |
NULL |
NUMERIC |
ON |
OPTIMIZE |
OPTION |
OPTIONALLY |
OR |
ORDER |
OUT |
OUTER |
OUTFILE |
PRECISION |
PRIMARY |
PROCEDURE |
PURGE |
RANGE |
READ |
READS |
READ_ONLY |
READ_WRITE |
REAL |
REFERENCES |
REGEXP |
RELEASE |
RENAME |
REPEAT |
REPLACE |
REQUIRE |
RESTRICT |
RETURN |
REVOKE |
RIGHT |
RLIKE |
SCHEMA |
SCHEMAS |
SECOND_MICROSECOND |
SELECT |
SENSITIVE |
SEPARATOR |
SET |
SHOW |
SMALLINT |
SPATIAL |
SPECIFIC |
SQL |
SQLEXCEPTION |
SQLSTATE |
SQLWARNING |
SQL_BIG_RESULT |
SQL_CALC_FOUND_ROWS |
SQL_SMALL_RESULT |
SSL |
STARTING |
STRAIGHT_JOIN |
TABLE |
TERMINATED |
THEN |
TINYBLOB |
TINYINT |
TINYTEXT |
TO |
TRAILING |
TRIGGER |
TRUE |
UNDO |
UNION |
UNIQUE |
UNLOCK |
UNSIGNED |
UPDATE |
USAGE |
USE |
USING |
UTC_DATE |
UTC_TIME |
UTC_TIMESTAMP |
VALUES |
VARBINARY |
VARCHAR |
VARCHARACTER |
VARYING |
WHEN |
WHERE |
WHILE |
WITH |
WRITE |
XOR |
YEAR_MONTH |
ZEROFILL |
Folgende reservierte Wörter sind neu in MySQL 5.1:
ACCESSIBLE |
LINEAR |
MASTER_SSL_VERIFY_SERVER_CERT |
RANGE |
READ_WRITE |
MySQL gestattet auch die Verwendung bestimmter Schlüsselwörter als Bezeichner ohne Anführungszeichen, da viele Benutzer sie in der Vergangenheit bereits eingesetzt haben. Beispiele entnehmen Sie der folgenden Liste:
ACTION
BIT
DATE
ENUM
NO
TEXT
TIME
TIMESTAMP
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.