SQLite Delete 語句

SQLite 的 DELETE 查詢用於刪除表中已有的記錄。可以使用帶有 WHERE 子句的 DELETE 查詢來刪除選定行,否則所有的記錄都會被刪除。

刪除某一條數據

需求:設備產生告警信息,要將信息保存到數據庫,最多存2000條告警,達到上限時刪除時間最早的告警。報警信息包括UTC時間戳、用戶、報警類型等信息,刪除的SQLite 語句如下

# MAX_NUM爲報警上限2000,則num = 1988,那麼select選取的爲第1999條數據,以倒數第二條數據的時間爲基準刪除最後一條數據
num = MAX_NUM - 2;			
delete from tableName where alarmTime < (select alarmTime from tableName order by alarmTime desc limit num,1);

上面實現存在一個問題,就是當倒數最後一條和倒數第二條時間相同時,不會刪除最後一條數據,之後想改用 <= 來判斷,代碼如下

# MAX_NUM爲報警上限2000,則num = 1988,那麼select選取的爲第1999條數據,以倒數第二條數據的時間爲基準刪除最後一條數據
num = MAX_NUM - 2;			
delete from tableName where alarmTime <= (select alarmTime from tableName order by alarmTime desc limit num,1);

但是改成 <= 來判斷又存在另外一個問題,就是會刪除時間戳相同的多條數據。


百度之後發現 rowid in用法,修改SQLite 語句如下

num = MAX_NUM - 1;			#直接取最後一條數據的rowid 
delete from tableName where rowid in (select rowid from tableName order by alarmTime desc limit num,1);

但是仍存在一個問題,例如第1,2,3條數據時間相同,倒敘排列順序就爲2000,1999,……,1,2,3,那麼如此一來刪除的是第3條數據,並非第1條數據。

其他思路:判斷數據是否達到2000條,若達到,則順序排列刪除第一條。

語法

帶有 WHERE 子句的 DELETE 查詢的基本語法如下:

DELETE FROM table_name
WHERE [condition];

您可以使用 AND 或 OR 運算符來結合 N 個數量的條件。

SQLite Delete 語句

https://www.runoob.com/sqlite/sqlite-delete.html

SQLite rowid使用

https://blog.csdn.net/daxueba/article/details/70208419

參考資料

http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f727618c864423c3933fc239045c1426a5e0767c471991d27c1147fa1d1cb7b87c32200356e7c89b9f4aaae1d477719c6269304a8900518d42e99c5124b137e12efed96ef0ccf425e2aac5d2af4322c144750d97808a4d7462dd6e800347e3b1e938025e60ad9c41728b5e6028ef3431c5508d96251e709680ab&p=8d769a47a4b110f812bd9b790c0d&newp=9965dc5b85cc43ff57ea95224f5292695d0fc20e3bd4d301298ffe0cc4241a1a1a3aecbf2d201b07d9c67e6702a84f56e0f13c783d0034f1f689df08d2ecce7e&user=baidu&fm=sc&query=SQLite%CF%DE%D6%C6%C9%BE%B3%FD%D2%BB%CC%F5%CA%FD%BE%DD&qid=b59dc86b0002f8d1&p1=10

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章