2017-01-26 39 views
2

我在SQL公司的代碼中發現了一個奇怪的錯誤,那就是當我們想要更新一個表時,基本上更新了表中的所有行。代碼如下。SQL中的撇號選擇整個表

UPDATE table SET 'disconnections'=value WHERE 'connections'=(SELECT MAX('connections') FROM table) 

這裏的撇號圍繞列名顯然是錯的。所以這是更新表中的所有行;我們刪除了他們,並按照預期工作。那是什麼交易?

謝謝!

+1

您使用的數據庫是?你確定角色是'而不是'嗎? –

+0

請標記正確的DBMS – ADyson

+0

在ANSI SQL中,單引號用於字符串文字,例如, 「一些文字」。使用雙引號標識符,例如'「列名」'。 – jarlh

回答

3

問題出在MAX('connections')。顯然你想用``而不是單配額''。在你的情況下,'connections'是一個字符串常量而不是字段名稱。所以MAX(constant) = constant。對於表中的所有記錄,此條件爲TRUE,因爲它不依賴名稱爲「connections」的字段。

我想這是MySQL,所以如果你想引用一個字段名稱,你應該使用``而不是''。