SQLite如何同时使用UPDATE和LIMIT?

SQLite how to use UPDATE and LIMIT at the same time?

我正在寻找的是只更新 table 中的 1 行,其中所有条目一开始都是零。
在网上冲浪一段时间后,我发现 LIMIT 应该可以很好地与 UPDATE 一起使用,但也不完全是。据我所见,我应该 "enabled" 一些 SQLITE_ENABLE_UPDATE_DELETE_LIMIT 的东西,但我不知道那是什么,也不知道我应该在何时何地完成它。
对于我的情况,我也看到了不同的解决方案,例如:

UPDATE Table_name
Set Column_name= new_value
WHERE Column_name IN 
(   SELECT Column_name
    FROM Table_name
    WHERE Column_name = initial_value
    LIMIT 1
)

但是,出于某种原因,这对我不起作用。 LIMIT 1 完全没有效果,因为整个列都被修改了。

是否因为我在 SET/SELECTWHERE 中使用了相同的列名?

我的table只有一列。

作为初学者:为了使您的问题完全有意义,您需要一个列来定义行的顺序,这样您就可以始终如一地判断应该更新哪条记录。这通常是 table 的主键。假设此列名为 id.

然后,您可以将查询写成:

update table_name
set column_name = 'new value'
where column_name = 'initial value'
order by id
limit 1

如果 您没有主键列,从技术上讲可以删除 order by 子句。将更新任意一行。

update table_name
set column_name = 'new value'
where column_name = 'initial value'
limit 1

请注意,要使其正常工作,您需要在启用选项 SQLITE_ENABLE_UPDATE_DELETE_LIMIT 的情况下编译 SQLite(这并不容易,正如 Shawn 和 forpas 所评论的那样)。

如果您没有该选项但有一个主键列,那么您可以使用子查询进行过滤:

update table_name
set column_name = 'new value'
where id = (
    select min(t1.id) 
    from table_name t1 
    where t1.column_name = 'initial value'
)

您可以获得满足您条件的行的最小(或最大)rowid 行,并使用它仅更新 1 行:

UPDATE Table_name
Set Column_name= new_value
WHERE rowid = (   
  SELECT MIN(rowid)
  FROM Table_name
  WHERE Column_name = initial_value
)