Um problema comum ocorre quando tentamos criar tabelas com nome
de campo que usam nomes de tipos de dados ou funções criadas
no MySQL, com TIMESTAMP
ou
GROUP
, Você poderá fazer isso (por exemplo,
ABS
é um nome de campo permitido). No
entanto espaços não são permitidos entre o nome da função e
o caracter ‘(
’, assim a função
pode ser distinguida de uma referência a um nome de coluna.
Se você iniciar o servidor com a opção
--ansi
ou
--sql-mode=IGNORE_SPACE
, o servidor permite que
a chamada da função tenha um espaço entre um nome de função
e o caracter ‘(
’ seguinte. Isto
faz com que o nome da funçao seja tratado como uma palavra
reservada; como um resultadom nomes de coluna que são o mesmo
que o nome de uma função devem ser colocada entre aspas como
descrito em Secção 6.1.2, “Nomes de Banco de dados, Tabela, Índice, Coluna e Alias”.
As seguintes palavras são explicitamente reservadas em MySQL.
Muitas delas são proibidas pelo ANSI SQL92 como nomes de campos
e/ou tabelas. (por examplo, group
). Algumas
poucas são reservadasporque o MySQL precisa delas e está
usando (atualmente) um analisador yacc
:
ADD |
ALL |
ALTER |
ANALYZE |
AND |
AS |
ASC |
BEFORE |
BETWEEN |
BIGINT |
BINARY |
BLOB |
BOTH |
BY |
CASCADE |
CASE |
CHANGE |
CHAR |
CHARACTER |
CHECK |
COLLATE |
COLUMN |
COLUMNS |
CONSTRAINT |
CONVERT |
CREATE |
CROSS |
CURRENT_DATE |
CURRENT_TIME |
CURRENT_TIMESTAMP |
CURRENT_USER |
DATABASE |
DATABASES |
DAY_HOUR |
DAY_MICROSECOND |
DAY_MINUTE |
DAY_SECOND |
DEC |
DECIMAL |
DEFAULT |
DELAYED |
DELETE |
DESC |
DESCRIBE |
DISTINCT |
DISTINCTROW |
DIV |
DOUBLE |
DROP |
DUAL |
ELSE |
ENCLOSED |
ESCAPED |
EXISTS |
EXPLAIN |
FALSE |
FIELDS |
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 |
INSERT |
INT |
INT1 |
INT2 |
INT3 |
INT4 |
INT8 |
INTEGER |
INTERVAL |
INTO |
IS |
JOIN |
KEY |
KEYS |
KILL |
LEADING |
LEFT |
LIKE |
LIMIT |
LINES |
LOAD |
LOCALTIME |
LOCALTIMESTAMP |
LOCK |
LONG |
LONGBLOB |
LONGTEXT |
LOW_PRIORITY |
MATCH |
MEDIUMBLOB |
MEDIUMINT |
MEDIUMTEXT |
MIDDLEINT |
MINUTE_MICROSECOND |
MINUTE_SECOND |
MOD |
NATURAL |
NOT |
NO_WRITE_TO_BINLOG |
NULL |
NUMERIC |
ON |
OPTIMIZE |
OPTION |
OPTIONALLY |
OR |
ORDER |
OUTER |
OUTFILE |
PRECISION |
PRIMARY |
PRIVILEGES |
PROCEDURE |
PURGE |
READ |
REAL |
REFERENCES |
REGEXP |
RENAME |
REPLACE |
REQUIRE |
RESTRICT |
REVOKE |
RIGHT |
RLIKE |
SECOND_MICROSECOND |
SELECT |
SEPARATOR |
SET |
SHOW |
SMALLINT |
SONAME |
SPATIAL |
SQL_BIG_RESULT |
SQL_CALC_FOUND_ROWS |
SQL_SMALL_RESULT |
SSL |
STARTING |
STRAIGHT_JOIN |
TABLE |
TABLES |
TERMINATED |
THEN |
TINYBLOB |
TINYINT |
TINYTEXT |
TO |
TRAILING |
TRUE |
UNION |
UNIQUE |
UNLOCK |
UNSIGNED |
UPDATE |
USAGE |
USE |
USING |
UTC_DATE |
UTC_TIME |
UTC_TIMESTAMP |
VALUES |
VARBINARY |
VARCHAR |
VARCHARACTER |
VARYING |
WHEN |
WHERE |
WITH |
WRITE |
XOR |
YEAR_MONTH |
ZEROFILL |
São as seguintes as novas palavras reservadas do MySQL 4.0:
CHECK |
FORCE |
LOCALTIME |
LOCALTIMESTAMP |
REQUIRE |
SQL_CALC_FOUND_ROWS |
SSL |
XOR |
São as seguintes as novas palavras reservadas do MySQL 4.1:
BEFORE |
COLLATE |
CONVERT |
CURRENT_USER |
DAY_MICROSECOND |
DIV |
DUAL |
FALSE |
HOUR_MICROSECOND |
MINUTE_MICROSECOND |
MOD |
NO_WRITE_TO_BINLOG |
SECOND_MICROSECOND |
SEPARATOR |
SPATIAL |
TRUE |
UTC_DATE |
UTC_TIME |
UTC_TIMESTAMP |
VARCHARACTER |
Os simbolos seguintes (da tabela acima) não são permitidos pelo SQL-99 mas permitidos pelo MySQL como nome de campos/tabelas. Isto ocorre porque alguns destes nomes são muito naturais e vários pessoas já o utilizaram.
ACTION
BIT
DATE
ENUM
NO
TEXT
TIME
TIMESTAMP
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.