問題描述:今天使用mysql新建了一個表。在插入數據時,報了語法錯誤。由於使用的是 mabits 代碼自動生成工具,並且自己沒有改寫其中的sql語句。所以確信,sql語句部分應該沒有可能寫錯。因此馬上意識到可能表裡面的字段出了問題。於是查看表裡面的字段,發現有一個desc 字段和mysql中降序的關鍵字沖突了。然後順手把這個字段改寫成了describe。到這裡,以為問題就應該解決了。誰料想,又沖突了。describe也是mysql的關鍵字。於是上網搜了一下mysql 關鍵字表。
如下是mysql關鍵字表
MySQL 5.5 保留關鍵字
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
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
LINEAR
LINES
LOAD
LOCALTIME
LOCALTIMESTAMP
LOCK
LONG
LONGBLOB
LONGTEXT
LOOP
LOW_PRIORITY
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
OPTION
OPTIONALLY
OR
ORDER
OUT
OUTER
OUTFILE
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
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
WHEN
WHERE
WHILE
WITH
WRITE
XOR
YEAR_MONTH
ZEROFILL
MySQL 5.5新增的保留關鍵字
GENERAL
IGNORE_SERVER_IDS
MASTER_HEARTBEAT_PERIOD
MAXVALUE
RESIGNAL
SIGNAL
SLOW
MySQL 允許一些大家常用到的關鍵字使用英文 ` 號引起來使用,如:
ACTION
BIT
DATE
ENUM
NO
TEXT
TIME
TIMESTAMP
上述表中的關鍵字,在設計數據庫時,應當盡量避免這些不必要的沖突。
問題解決:把關鍵字替換成了非關鍵字。
經驗總結:通過程序操作數據庫時,mysql會解析你代碼裡的sql語句,如果操作的字段中含有關鍵字,你寫的sql語句就可能被錯誤解釋了,sql語句也就出錯了。數據庫種類還是比較多的。多多少少都有點關鍵字,每個版本還略有不同。在設計數據庫表的時候,應當設計的字段名特殊一點,盡量長一點,避免和關鍵字沖突。