SQLite3中的UPDATE问题

时间:2015-10-29 21:59:38

标签: sqlite

我似乎无法让我的UPDATE语句工作,尽管我阅读了所有内容,但我一直无法找到解决方案。我正在使用OS X Yosemite(10.11.1)和SQLite 3.8.10.2。

我想做什么

我只想更新数据库的前N行。

我尝试了什么

数据库的结构如下:

ID | COL1 | COL2 | COL3

我最初的尝试是:

UPDATE TESTTABLE SET COL1="7", COL2="7", COL3="UPDATE" WHERE * LIMIT 15;

但是我收到以下错误:

Error: near "*": syntax error

但是,如果我这样做:

UPDATE TESTTABLE SET COL1="7", COL2="7", COL3="UPDATE" WHERE *;

整个数据库更新,正如我所料。

我还尝试过以下方法:

UPDATE TESTTABLE SET COL1="7", COL2="7", COL3="UPDATE" LIMIT 15;
UPDATE TESTTABLE SET COL1="7", COL2="7", COL3="UPDATE" WHERE ID > 0 LIMIT 15;
UPDATE TESTTABLE SET COL1="7", COL2="7", COL3="UPDATE" WHERE * LIMIT 15 OFFSET 0;

我能说的最好,有一个我可以使用限制的细节。有人能解释一下这个问题吗?

修改

看起来我的SQLite版本没有使用SQLITE_ENABLE_UPDATE_DELETE_LIMIT选项集进行编译。

编辑2

请参阅原始编辑,了解我遇到此问题的原因。我能够使用以下代码来实现相同的效果:

UPDATE TESTTABLE SET COL1="7", COL2="7", COL3="UPDATE" WHERE ID IN (SELECT ID FROM TESTTABLE LIMIT 15);

1 个答案:

答案 0 :(得分:1)

sqllite documentation表示必须使用SQLITE_ENABLE_UPDATE_DELETE_LIMIT进行编译才能支持Limit使用Update

您正在使用LIMIT而未指定ORDER BY。即使您依赖主键,仍应指定Order子句。