如何在 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 usingIN
不起作用,仅与 =
一起使用
@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