MySQL不能寫入資料之關鍵字衝突

來源:互聯網
上載者:User

MySQL不能寫入資料之關鍵字衝突

問題描述:今天使用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語句也就出錯了。資料庫種類還是比較多的。多多少少都有點關鍵字,每個版本還略有不同。在設計資料庫表的時候,應當設計的欄位名特殊一點,盡量長一點,避免和關鍵字衝突。

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.