2014-01-23 36 views
0

我試圖對我做的,看起來像這樣一個示例表執行SQL查詢:SQLite的UPDATE語句是做什麼,如果列報

 
name  text         number 
---------------------------------------------------------- 
target  the cell to operate on     5 
cruft  cell here to simulate stuff happening 7 

這是SQL查詢我試圖執行:

UPDATE data SET 'name'='target', 'number'=2 WHERE 'name'='target'; 

我預期這對第一行中改變5至2.

當我在命令行源碼versio試圖SQLite Database Browser執行此,並最終在3.7.13中,它報告沒有錯誤,但也沒有更改所要求的條目。奇怪的是,如果引號從字符串'target'中刪除,我會收到一條錯誤消息,說明no such column: target即使'target'沒有被用作列名。刪除'name'='target',部分不會改變任何內容。

最終,我通過從WHERE子句中刪除單引號'name'解決了即時問題,這是混淆。

UPDATE data SET 'name'='target', 'number'=3 WHERE name='target'; 

有誰知道爲什麼會這樣,不然我怎麼能工作引號回,以防止一個假想的列名在它的空間?

回答

0

單引號用於字符串常量。在MySQL中,爲變量名稱使用反向標記 - 或者更好,除非名稱包含保留字或不尋常字符,否則什麼都不會。所以:

UPDATE data 
    SET name = 'target', 
     number = 2 
    WHERE name = 'target'; 

作爲一般規則,只使用單引號字符串常量。

1

對字符串文字使用單引號,即要分配給列的值。使用雙引號標識符,即列或表的名稱。見http://sqlite.org/faq.html#q24

因此,對於你的榜樣應該讀

UPDATE data SET "name"='target', "number"=2 WHERE "name"='target';