Общая проблема возникает при попытке использования идентификатора, такого как имя таблицы или столбца, совпадающего с именем встроенного в MySQL типа данных или именем функции, вроде TIMESTAMP или GROUP. Это делать разрешается (например, ABS допускается в качестве имени столбца). Однако по умолчанию не допускается наличие пробелов в вызове функции между именем функции и последующим символом ‘ (‘• Это требование позволяет отличить вызов функции от ссылки на имя столбца.
Побочный эффект такого поведения заключается в том, что пропущенный пробел в некоторых контекстах заставляет идентификатор интерпретироваться как имя функции. Например, приведенный ниже оператор корректен:
Но если пропустить пробел после abs, возникнет синтаксическая ошибка, поскольку анализатор воспринимает это как вызов функции ABS (): mysql CREATE TABLE abs(val INT);
Если SQL-режим сервера включает значение IGNORE_SPACE, то в вызове функции разрешается оставлять пробел между ее именем и последующим символом ‘ (‘. Это заставляет анализатор трактовать имена функций как зарезервированные слова. В результате идентификаторы, совпадающие с именами функций, должны быть взяты в кавычки, как описано в разделе Имена баз данных, таблиц, индексов, столбцов и псевдонимов
Слова из представленной ниже таблицы явно зарезервированы в MySQL. Большинство из них запрещены стандартом SQL для применения в качестве имен столбцов и/или таблиц (например, GROUP). Некоторые слова зарезервированы потому, что MySQL нуждается в них и в настоящее время использует анализатор уасс. Зарезервированные слова можно использовать в качестве идентификаторов, помещая их в кавычки.
ADD | ALL | ALTER |
ANALYZE | AND | AS |
ASC | ASENSITIVE | AUTO INCREMENT |
BDB | BEFORE | BERKELEYDB |
BETWEEN | BIGINT | BINARY |
BLOB | BOTH | BY |
CALL | CASCADE | CASE |
CHANGE | CHAR | CHARACTER |
CHECK | COLLATE | COLUMN |
COLUMNS | CONDITION | CONNECTION |
CONSTRAINT | CONTINUE | CREATE |
CROSS | CURRENT_DATE | CURRENT TIME |
CURRENT_TIMESTAMP | 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 | ELSE | ELSEIF |
ENCLOSED | ESCAPED | EXISTS |
EXIT | EXPLAIN | FALSE |
FETCH | FIELDS | FLOAT |
FOR | FORCE | FOREIGN |
FOUND | FRAC SECOND | FROM |
FULLTEXT | GRANT | GROUP |
HAVING | HIGH PRIORITY | HOUR MICROSECOND |
HOUR_MINUTE | HOUR SECOND | IF |
IGNORE | IN | INDEX |
INFILE | INNER | INNODB |
INOUT | INSENSITIVE | INSERT |
INT | INTEGER | INTERVAL |
INTO | IO_THREAD | IS |
ITERATE | JOIN | KEY |
KEYS | KILL | LEADING |
Следующие ключевые слова разрешены в MySQL для использования в качестве имен таблиц и столбцов. Это связано с тем, что они представляют собой очень естественные слова и большинство людей применяют их.
LEAVE
LIMIT
LOCALTIME
LONG
LOOP
MATCH
MEDIUMTEXT
MINUTE_SECOND
NOT
NUMERIC
OPTION
ORDER
OUTFILE
PRIVILEGES
READ
REGEXP
REPLACE
RETURN
RLIKE
SENSITIVE
SHOW
SONAME
SQL
SQLWARNING
SQL_SMALL_RESULT
SQL_TSI_HOUR
SQL_TSI_QUARTER
SQL_TSI_YEAR
STRAIGHT_JOIN
TABLES
TIMESTAMPADD
TINYINT
TRAILING
UNION
UNSIGNED
USE
UTC_DATE
VALUES
VARCHARACTER
WHERE
WRITE
ZEROFILL
LEFT
LINES
LOCALTMESTAMP
LONGBLOB
LOW_PRIORITY
MEDIUMBLOB
MIDDLEINT
MOD
NO_WRITE_TO_BINLOG
ON
OPTIONALLY
OUT
PRECISION
PROCEDURE
REAL
RENAME
REQUIRE
REVOKE
SECOND_MICROSECOND
SEPARATOR
SMALLINT
SPATIAL
SQLEXCEPTION
SQL_BIG_RESULT
SQL_TSI_DAY
SQL_TSI_MINUTE
SQL_TSI_SECOND
SSL
STRIPED
TERMINATED
TIMESTAMPDIFF
Т1КУТЕХГ
TRUE
UNIQUE
UPDATE
USER_RESOURCES
UTC_TIME
VARBINARY
VARYING
WHILE
XOR
LIKE
LOAD
LOCK
LONGTEXT
MASTER_SERVER_ID
MEDIUMINT
MINUTE_MICROSECOND
NATURAL
NULL
OPTIMIZE
OR
OUTER
PRIMARY
PURGE
REFERENCES
REPEAT
RESTRICT
RIGHT
SELECT
SET
SOME
SPECIFIC
SQLSTATE
SQL_CALC_FOUND_ROWS
SQL_TSI_FRAC_SECOND
SQL_TSI_MONTH
SQL_TSI_WEEK
STARTING
TABLE
THEN
TINYBLOB
TO
UNDO
UNLOCK
USAGE
USING
UTC_TIMESTAMP
VARCHAR
WHEN
WITH
YEAR MONTH
ACTION
BIT
DATE
ENUM NO
TEXT
TIME TIMESTAMP