Поиск

Трактовка зарезервированных слов MySQL

Общая проблема возникает при попытке использования идентификатора, такого как имя таблицы или столбца, совпадающего с именем встроенного в MySQL типа данных или именем функции, вроде TIMESTAMP или GROUP. Это делать разрешается (например, ABS допускается в качестве имени столбца). Однако по умолчанию не допускается нали­чие пробелов в вызове функции между именем функции и последующим символом ' ('• Это требование позволяет отличить вызов функции от ссылки на имя столбца.
Побочный эффект такого поведения заключается в том, что пропущенный пробел в некоторых контекстах заставляет идентификатор интерпретироваться как имя функции. Например, приведенный ниже оператор корректен:

mysql CREATE TABLE abs (val ШГ ;
Но если пропустить пробел после 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