2010-03-05 106 views
5

我很熟悉SQL,但是我必須在這裏錯過一些非常愚蠢的東西。此更新查詢不斷拋出錯誤。該查詢是:爲什麼這個SQL UPDATE查詢不起作用?

UPDATE pages SET 'order' = 1 WHERE id = 19 

該表格肯定有一個訂單列,它有一個ID爲19的記錄。訂單列不是唯一的。

我得到的錯誤是通用的一個:

#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" = 2 WHERE id = 19' at line 1 

我在引號順序,因爲ORDER是保留SQL字。我錯過了什麼?

+1

如果這是一個尚未投入生產的表,我建議您將提交的名稱更改爲不需要轉義的名稱。這將節省大量的維護時間,因爲人們會忘記這麼做,然後想知道什麼是錯的。 將來,請勿爲字段名稱使用保留字。 – HLGEM 2010-03-05 14:26:47

回答

7

如果使用MySQL查詢應該是這樣的:

UPDATE `pages` SET `order`=1 WHERE `id`=19 
+0

只有反引號工作,但你只需要他們在保留字,順序。所以它的更新頁面設置'訂單'= 1其中id = 19限制1.我確信方括號會起作用,我必須考慮他們爲什麼沒有。 – rhodesjason 2010-03-05 07:26:16

+0

請注意,您不必轉義每個單詞(如示例中所示)。只有'訂單'。 – Timothy 2010-03-05 07:26:18

+0

是的,你不必逃避每一個字。 但是爲了更好地理解(以及我認爲它的良好實踐)來逃避表和行的名稱。 這裏是一個保留字foy mysql的列表:http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html – Tobias 2010-03-05 07:28:19

3

這看起來像一個MySQL錯誤消息。 MySQL不使用反引號(`)來轉義嗎?

3
UPDATE pages SET [order] = 1 WHERE id = 19 

Nevemind MySQL的

+0

它在錯誤消息中說「MySQL」正確。 :-) – Ken 2010-03-05 07:13:22

+0

有趣的是,這也沒有奏效。儘管我立即意識到你在說什麼,並且確定是這樣。 – rhodesjason 2010-03-05 07:14:27

1

不使用引號,用[順序(或任何你的SQL版本使用轉義)。使用常規引號將其視爲字符串文字,這是不允許的。

0

您需要刪除從列名規範單引號中查詢

UPDATE pages SET order = 1 WHERE id = 19 ; 
+1

這不起作用。 ORDER是一個保留字,所以它必須轉義(這是數據庫特定的) – Timothy 2010-03-05 07:23:33

0

order是在使用的保留字ORDER BY

使用反引號(`)(正如肯說的)。

0

最簡單的答案是;

UPDATE pages SET pages.order = 1 WHERE id = 19 ; 

這應該做的伎倆。

0

我認爲查詢應該是;

UPDATE pages SET order = '1' 
WHERE id = 19 
相關問題