以下是我的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时,我需要删除第一个条目。
答案 0 :(得分:0)
有时会删除随机条目,但不会删除第一个条目。
你误解了关系数据库。表表示无序集。除非您明确定义排序,否则表中没有“第一”行。
因为这个问题经常发生,所以SQLite有一个内置的解决方法,rowid
“列”。您可以将其用作常规列,从而产生:
delete from url_db
order by rowid
limit 1;
就个人而言,我更喜欢显式声明的自动增量列,但SQLite在此函数中构建(与其他数据库不同)。