sqlite delete命令启用限制时的结果不一致

时间:2018-06-07 08:06:24

标签: sql 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

所以我已经从official download page下载了完整的源代码(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时,我需要删除第一个条目。

1 个答案:

答案 0 :(得分:0)

  

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

你误解了关系数据库。表表示无序集。除非您明确定义排序,否则表中没有“第一”行。

因为这个问题经常发生,所以SQLite有一个内置的解决方法,rowid“列”。您可以将其用作常规列,从而产生:

delete from url_db
    order by rowid
    limit 1;

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