簡體   English   中英

sqlite delete命令的結果與啟用了限制的結果不一致

[英]Inconsistent result with sqlite delete command with limit enabled

這是我的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 “ column”。 您可以將其用作常規列,從而得到:

delete from url_db
    order by rowid
    limit 1;

就個人而言,我更喜歡顯式聲明的自動增量列,但是SQLite內置於此函數中(與其他數據庫不同)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM