Een veel voorkomend probleem bij MySQL-queries is dat een bepaald woord gereserveerd is. Dit houdt in dat het woord in kwestie reeds een bepaalde betekenis heeft voor MySQL.
Indien een dergelijk woord gereserveerd is, dien je het tussen "backticks" te plaatsen (`).
De enige uitzondering hierop is een woord dat volgt op een punt, omdat het dan geen gereserveerd woord in zijn geheel kan zijn. Een voorbeeld hiervan is mijnveld.select. Dit kan perfect gebruikt worden zonder backticks, omdat in gereserveerde woorden geen punt kan voorkomen, waaruit de slimme computer de conclusie trekt dat het om een tabelnaam of kolomnaam gaat.
Het is toegestaan om namen van functies te gebruiken om tabellen of kolommen aan te duiden. Een voorbeeld hiervan is SUM, dit kan perfect als tabelnaam gebruikt worden, indien je een spatie tussen de veldnaam en het volgende haakje plaatst.
Bij een functie wordt altijd de constructie FUNCTIE(blaat) gebruikt, waarbij de haakjes tegen de functie geplaatst worden.
De volgende query kan dus perfect: INSERT INTO SUM (sommetje,oplossing) VALUES ('1+1',2)
Indien je hier geen spatie zou plaatsen, krijg je SUM(sommetje,oplossing), wat totaal onlogisch is in een INSERT-query.
Indien de SQL modus IGNORE_SPACE is ingeschakeld, kan een functie aangeroepen worden met een spatie tussen de functie en het volgende haakje. Hiervoor worden functienamen behandeld als gereserveerde woorden. In dit geval moeten tabelnamen of kolomnamen dus wel tussen backticks geplaatst worden om aan te duiden dat het over een tabel of kolom gaat.
Gereserveerde woorden: een overzicht
Hieronder volgt een overzicht van alle gereserveerde woorden in MySQL 5.0. Het is aangeraden om deze woorden simpelweg niet te gaan gebruiken als kolomnaam, maar een passend alternatief te gaan gebruiken (ipv. TIME zou je bijvoorbeeld POSTING_TIME of iets dergelijks kunnen gebruiken).
ADD
ALL
ALTER
ANALYZE
AND
AS
ASC
ASENSITIVE
BEFORE
BETWEEN
BETWEEN
BIGINT
BIGINT
BINARY
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
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
PREFERENCES
PRIMARY
PROCEDURE
PURGE
RAIDO
READ
READS
REAL
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
Sinds MySQL 5 zijn de volgende woorden gereserveerd: