Reserved Words
Introduction#
MySQL has some special names called reserved words. A reserved word can be used as an identifier for a table, column, etc. only if it’s wrapped in backticks (`), otherwise it will give rise to an error.
To avoid such errors, either don’t use reserved words as identifiers or wrap the offending identifier in backticks.
Remarks#
Listed below are all reserved words (from the official documentation):
- ACCESSIBLE
- 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
- 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
- GENERATED
- GET
- 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
- IO_AFTER_GTIDS
- IO_BEFORE_GTIDS
- IS
- ITERATE
- JOIN
- KEY
- KEYS
- KILL
- LEADING
- LEAVE
- LEFT
- LIKE
- LIMIT
- LINEAR
- LINES
- LOAD
- LOCALTIME
- LOCALTIMESTAMP
- LOCK
- LONG
- LONGBLOB
- LONGTEXT
- LOOP
- LOW_PRIORITY
- MASTER_BIND
- MASTER_SSL_VERIFY_SERVER_CERT
- MATCH
- MAXVALUE
- MEDIUMBLOB
- MEDIUMINT
- MEDIUMTEXT
- MIDDLEINT
- MINUTE_MICROSECOND
- MINUTE_SECOND
- MOD
- MODIFIES
- NATURAL
- NOT
- NO_WRITE_TO_BINLOG
- NULL
- NUMERIC
- ON
- OPTIMIZE
- OPTIMIZER_COSTS
- OPTION
- OPTIONALLY
- OR
- ORDER
- OUT
- OUTER
- OUTFILE
- PARTITION
- PRECISION
- PRIMARY
- PROCEDURE
- PURGE
- RANGE
- READ
- READS
- READ_WRITE
- REAL
- REFERENCES
- REGEXP
- RELEASE
- RENAME
- REPEAT
- REPLACE
- REQUIRE
- RESIGNAL
- RESTRICT
- RETURN
- REVOKE
- RIGHT
- RLIKE
- SCHEMA
- SCHEMAS
- SECOND_MICROSECOND
- SELECT
- SENSITIVE
- SEPARATOR
- SET
- SHOW
- SIGNAL
- SMALLINT
- SPATIAL
- SPECIFIC
- SQL
- SQLEXCEPTION
- SQLSTATE
- SQLWARNING
- SQL_BIG_RESULT
- SQL_CALC_FOUND_ROWS
- SQL_SMALL_RESULT
- SSL
- STARTING
- STORED
- STRAIGHT_JOIN
- TABLE
- TERMINATED
- THEN
- TINYBLOB
- TINYINT
- TINYTEXT
- TO
- TRAILING
- TRIGGER
- TRUE
- UNDO
- UNION
- UNIQUE
- UNLOCK
- UNSIGNED
- UPDATE
- USAGE
- USE
- USING
- UTC_DATE
- UTC_TIME
- UTC_TIMESTAMP
- VALUES
- VARBINARY
- VARCHAR
- VARCHARACTER
- VARYING
- VIRTUAL
- WHEN
- WHERE
- WHILE
- WITH
- WRITE
- XOR
- YEAR_MONTH
- ZEROFILL
- GENERATED
- OPTIMIZER_COSTS
- STORED
- VIRTUAL
Errors due to reserved words
When trying to select from a table called order
like this
select * from order
the error rises:
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘order’ at line 1
Reserved keywords in MySQL need to be escaped with backticks (`
)
select * from `order`
to distinguish between a keyword and a table or column name.
See also: Syntax error due to using a reserved word as a table or column name in MySQL.