2010-03-05 174 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 
相关问题