与启用了限制的 sqlite 删除命令的结果不一致



这是我的sqlite db详细信息,

sqlite> .table
url_db
sqlite> .schema url_db
CREATE TABLE url_db(URL TEXT UNIQUE);
sqlite> select * from url_db;
play.googleapis.com
notifications.google.com
contacts.skype.com
edge.skype.com
people.skype.com

我想delete from url_db limit 1执行命令。

所以我从官方下载页面下载了完整的源代码(sqlite-src-3240000.zip(。

使用选项"SQLITE_ENABLE_UPDATE_DELETE_LIMIT=1"编译源代码

当我执行该命令(已执行的命令(时,有时它会删除随机条目,但不会删除第一个条目。我想删除play.googleapis.com,而不是该命令删除contacts.skype.com.

sqlite> select * from url_db;
play.googleapis.com
notifications.google.com
edge.skype.com
people.skype.com

此行为的原因是什么?我正在实施一个 FIFO 列表,当条目达到 500 时,我需要删除第一个条目。

有时它会删除随机条目,但不删除第一个条目。

您误解了关系数据库。 表表示无序集。 表中没有"第一"行,除非您显式定义排序。

由于此问题经常发生,SQLite 具有内置的解决方法,即rowid"列"。 您可以将其用作常规列,从而产生:

delete from url_db
order by rowid
limit 1;

就个人而言,我更喜欢显式声明的自动增量列,但 SQLite 在此函数中构建(与其他数据库不同(。

最新更新