若列被引用,SQLite UPDATE语句将不执行任何操作

若列被引用,SQLite UPDATE语句将不执行任何操作,sql,sqlite,Sql,Sqlite,我试图对我创建的示例表执行SQL查询,该示例表如下所示: name text number ---------------------------------------------------------- target the cell to operate on 5 cruft cell here to simulate stuff happening

我试图对我创建的示例表执行SQL查询,该示例表如下所示:

name text number ---------------------------------------------------------- target the cell to operate on 5 cruft cell here to simulate stuff happening 7 我希望这会将第一行中的5改为2

当我尝试在命令行sqlite版本3.7.13中执行此命令时,它没有报告任何错误,但也没有更改请求的条目。奇怪的是,如果从字符串'target'中删除引号,我会收到一条错误消息,说
没有这样的列:target
,即使'target'没有被用作列名。删除
'name'='target',
部分不会改变任何东西

最后,我通过删除WHERE子句中的
'name'
中的单引号,解决了眼前的问题,这让人感到困惑

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

有人知道为什么会发生这种情况吗,或者我如何将引号放回以防止出现带有空格的假想列名?

您正在测试字符串
'name'
是否等于字符串
'target'

列名应使用双引号:

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

参考:

单引号用于字符串常量。在MySQL中,对变量名称使用反勾号——或者更好的是,除非名称包含保留字或不寻常的字符,否则什么都不要。因此:

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

作为一般规则,仅对字符串常量使用单引号。

对字符串文本使用单引号,即要分配给列的值。标识符使用双引号,即列或表的名称。看

因此,对于您的示例,它应该是

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