A common problem stems from trying to use an identifier such as a
      table or column name that is a reserved word such as
      SELECT or the name of a built-in MySQL data
      type or function such as TIMESTAMP or
      GROUP.
    
If an identifier is a reserved word, you must quote it as described in Section 9.2, “Database, Table, Index, Column, and Alias Names”. Exception: A word that follows a period in a qualified name must be an identifier, so it is not necessary to quote it, even if it is a reserved word.
      You are permitted to use function names as identifiers. For
      example, ABS is acceptable as a column name.
      However, by default, no whitespace is allowed in function
      invocations between the function name and the following
      ‘(’ character. This requirement
      allows a function call to be distinguished from a reference to a
      column name.
    
A side effect of this behavior is that omitting a space in some contexts causes an identifier to be interpreted as a function name. For example, this statement is legal:
mysql> CREATE TABLE abs (val INT);
      But omitting the space after abs causes a
      syntax error because the statement then appears to invoke the
      ABS() function:
    
mysql> CREATE TABLE abs(val INT);
ERROR 1064 (42000) at line 2: You have an error in your SQL
syntax ... near 'abs(val INT)'
      If the IGNORE_SPACE SQL mode is enabled, the
      server allows function invocations to have whitespace between a
      function name and the following ‘(’
      character. This causes function names to be treated as reserved
      words. As a result, identifiers that are the same as function
      names must be quoted as described in
      Section 9.2, “Database, Table, Index, Column, and Alias Names”. The server SQL mode is controlled
      as described in Section 5.2.5, “The Server SQL Mode”.
    
      The words in the following table are explicitly reserved in MySQL
      5.0. At some point, you might update to a higher
      version, so it's a good idea to have a look at future reserved
      words, too. You can find these in the manuals that cover higher
      versions of MySQL. Most of the words in the table are forbidden by
      standard SQL as column or table names (for example,
      GROUP). A few are reserved because MySQL needs
      them and (currently) uses a yacc parser. A
      reserved word can be used as an identifier if you quote it.
    
| 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 | 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 | INT1 | 
| INT2 | INT3 | 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 | PRIMARY | PROCEDURE | 
| PURGE | RAID0 | READ | 
| READS | REAL | REFERENCES | 
| 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 | 
  The following are new reserved words in MySQL 5.0:
  ASENSITIVE, CALL,
  CONDITION, CONNECTION,
  CONTINUE, CURSOR,
  DECLARE, DETERMINISTIC,
  EACH, ELSEIF,
  EXIT, FETCH,
  GOTO, INOUT,
  INSENSITIVE, ITERATE,
  LABEL, LEAVE,
  LOOP, MODIFIES,
  OUT, READS,
  RELEASE, REPEAT,
  RETURN, SCHEMA,
  SCHEMAS, SENSITIVE,
  SPECIFIC, SQL,
  SQLEXCEPTION, SQLSTATE,
  SQLWARNING, TRIGGER,
  UNDO, UPGRADE,
  WHILE.
MySQL allows some keywords to be used as unquoted identifiers because many people previously used them. Examples are those in the following list:
          ACTION
        
          BIT
        
          DATE
        
          ENUM
        
          NO
        
          TEXT
        
          TIME
        
          TIMESTAMP