2009-05-26 147 views
2

好吧,我有一個非常簡單的mysql數據庫,但是當我試圖通過MySQL的管理員來運行此查詢我得到奇怪的錯誤爲什麼此SQL INSERT語句返回語法錯誤?

INSERT INTO customreports (study, type, mode, select, description) VALUES ('1', '2', '3', '4', '5');

錯誤:因爲你

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 'select, description) VALUES ('1', '2', '3', '4', '5')' at line 1

回答

13

您有任何問題'使用SQL保留字作爲列名而不是逃避它們。嘗試是這樣的:

INSERT INTO `customreports` 
(`study`, `type`, `mode`, `select`, `description`) 
VALUES 
('1', '2', '3', '4', '5'); 
+6

+1這是正確的答案,但我肯定會將字段名稱更改爲非保留字。使用保留字來表示對象名會導致您和所有追隨您的人頭痛。 – 2009-05-26 20:23:56

+1

這確實是正確的答案。但是,爲了不使用保留字,我不建議更改列名,所以最好避免使用所有標識符,這樣可以爲您節省大量的麻煩。雖然我必須承認,那麼'選擇'作爲一個列名是有點,你知道,在頂部。 – shylent 2009-05-26 20:34:39

0

只是一個猜測,但是保留字「選擇」(列出作爲列名稱)導致問題?

+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – 2012-11-18 14:16:20

0

「選擇」是SQL保留字......用不同的詞不是「選擇」

0

字「選擇」在SQL被保留。解釋器認爲你正試圖在INSERT INTO語句中使用SELECT語句。您需要附上字段名稱,以便解釋器不會將其作爲命令讀取。

更新爲MySQL:

insert into customreports ('study','type','mode','select','description') values... 
3

是的,我將作爲重寫:

INSERT INTO [customreports]([研究],[類型],[模式],[選擇],[描述])VALUES('1','2','3','4','5');

0

正確的每個混沌...但要記住的關鍵是你應該儘量不要使用RESERVED單詞作爲列表中的列名......例如SELECT和TYPE ....不是正面的其他三個,但這就是你的衝突所在。是的,通過明確引用這些字段將會告訴您SQL所指的是其中的字段,但它也最好知道它爲什麼失敗,而不僅僅是解決方案......有助於防止將來出現類似的問題。

0

同上,但我相信你需要圍繞列名雙引號,而不是單引號。也許某些SQL會正確處理單引號,但我認爲該標準說明了字段名稱的雙引號,字段值的單引號。