Un problema común se origina cuando se intenta utilizar en un
identificador tal como un nombre de tabla o columna el nombre de
un tipo de dato o una función incorporados en MySQL, como
TIMESTAMP
o GROUP
. Es
posible hacer esto (por ejemplo, ABS
es un
nombre de columna válido). Sin embargo, por defecto, al invocar
una función no se permiten espacios entre su nombre y el
carácter '(
' que le sigue. Este requisito
permite distinguir entre una llamada a una función y una
referencia a una columna con el mismo nombre.
Un efecto secundario de este comportamiento es que omitir un espacio en ciertos contextos provoca que un identificador sea interpretado como un nombre de función. Por ejemplo, esta sentencia es legal:
mysql> CREATE TABLE abs (val INT);
Pero al omitirse el espacio luego de abs
, se
produce un error de sintaxis porque la sentencia pasa a invocar la
función ABS()
:
mysql> CREATE TABLE abs(val INT);
Si el modo de servidor SQL incluye el valor
IGNORE_SPACE
, el servidor permite que las
invocaciones a funciones tengan espacios en blanco entre el nombre
de la función y el carácter '(
' que le sigue.
Esto convierte a los nombres de funciones en palabras reservadas.
Como resultado, los identificadores que tienen similar nombre a
una función deben ser delimitados por comillas como se describe
en Sección 9.2, “Nombres de bases de datos, tablas, índices, columnas y alias”. Para controlar el modo de
servidor SQL consulte Sección 5.3.2, “El modo SQL del servidor”.
Una palabra a continuación de un punto en un nombre calificado (por ejemplo nom_bd.nom_tabla) debe ser un identificador, por lo que no es necesario delimitarlo, incluso si es una palabra reservada.
Las palabras en la siguiente tabla están explícitamente
reservadas en MySQL. La mayoría de ellas están prohibidas por el
estándar SQL para ser empleadas como nombres de columnas y/o
tablas (por ejemplo, GROUP
). Unas pocas son
reservadas porque MySQL las necesita y (actualmente) utiliza un
intérprete (parser) yacc. Una palabra
reservada puede emplearse como identificador si se la delimita con
comillas.
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 | CONNECTION | 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 |
LINES | LOAD | LOCALTIME |
LOCALTIMESTAMP | LOCK | LONG |
LONGBLOB | LONGTEXT | LOOP |
LOW_PRIORITY | 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 | RAID0 | READ |
READS | REAL | REFERENCES |
REGEXP | RELEASE | RENAME |
REPEAT | REPLACE | REQUIRE |
RESTRICT | RETURN | REVOKE |
RIGHT | RLIKE | SCHEMA |
SCHEMAS | SECOND_MICROSECOND | SELECT |
SENSITIVE | SEPARATOR | SET |
SHOW | SMALLINT | SONAME |
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 | UPGRADE | USAGE |
USE | USING | UTC_DATE |
UTC_TIME | UTC_TIMESTAMP | VALUES |
VARBINARY | VARCHAR | VARCHARACTER |
VARYING | WHEN | WHERE |
WHILE | WITH | WRITE |
X509 | XOR | YEAR_MONTH |
ZEROFILL |
MySQL permite que algunas palabras clave sean utilizadas como identificadores sin delimitar porque mucha gente las ha usado previamente. Por ejemplo:
-
ACTION
-
BIT
-
DATE
-
ENUM
-
NO
-
TEXT
-
TIME
-
TIMESTAMP