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

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