如何在 SQLite 中为 DELETE 启用 LIMIT?

Posted

技术标签:

【中文标题】如何在 SQLite 中为 DELETE 启用 LIMIT?【英文标题】:How do you enable LIMIT for DELETE in SQLite? 【发布时间】:2010-12-21 22:08:27 【问题描述】:

使用 php,我有一个简单的数据库,可以存储具有相同内容的多个项目。我想在使用 DELETE 时删除第一次出现的实例。

如何使用 PHP 在 SQLite 中为 DELETE 启用 LIMIT?

【问题讨论】:

【参考方案1】:

您可以将限制与选择一起使用,您可以将选择和删除结合起来:

DELETE FROM Foo
WHERE someColumn in
(
  SELECT someColumn FROM FOO WHERE SomeCondition LIMIT 200
)

【讨论】:

聪明的把戏。还有一件事:someColumn 使用 PK 列更安全。 不太一样。匹配的行数可能超过200。 对我来说,直到我将 IN 替换为 = 后它才起作用。【参考方案2】:
DELETE FROM table WHERE rowid = (SELECT rowid FROM table WHERE condition LIMIT 1 )

【讨论】:

或者:DELETE FROM table WHERE rowid IN (SELECT rowid FROM table WHERE condition LIMIT amount_of_rows) @LionKing No using IN 不起作用,仅与 = 一起使用 @MehdiRezzagHebla 使用 IN 表单可以直接在 sqlite3 中按预期工作。我知道这是旧评论,但想澄清它确实有效。【参考方案3】:

您不能在 PHP 中启用这些选项,您需要自己编译 SQLite 才能启用这些选项。重要的是,您需要从SQLite download page 下载完整版,而不是合并源版本。

如果您使用的是 Unix,请获取 sqlite-3.6.20.tar.gz 压缩包并下载它。那么:

tar xzf sqlite-3.6.20.tar.gz
cd sqlite-3.6.20
export CFLAGS='-DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1'
./configure
make

然后您将拥有sqlite3 命令行实用程序和.libs 子目录中的库文件。

【讨论】:

我知道你没有这样做,但为什么我的问题被锁定了? 发现不行,我用的版本是3.7.6.2。还有其他想法吗? 现在您可以将--enable-update-limit 选项传递给./configure,而不是触摸cflags。 (当然,在单独的项目中使用创建的sqlite3.c 合并时,仍然必须定义SQLITE_ENABLE_UPDATE_DELETE_LIMIT【参考方案4】:

来自here,看来你必须使用编译SQLite源代码

#define SQLITE_ENABLE_UPDATE_DELETE_LIMIT

为了启用它。

【讨论】:

哎呀,我应该注意到我正在用 php 做这个。

以上是关于如何在 SQLite 中为 DELETE 启用 LIMIT?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .NET 中为自定义配置部分启用 configSource 属性?

如何在 Visual Studio 2013 中为 sqlite 配置实体框架 6

在 AWS CloudFront 上启用 POST/PUT/DELETE?

如何在 swt 中为文本编辑器实现 ctrl+backspace 和 ctrl+delete

如何在 php 中启用 sqlite3 的 PDO 驱动程序?

如何在 Storybook 中为 Angular 启用样式源映射