sqlite 如何删除表的第n行,然后更新其他行的rowid/auto-increment列

kcugc4gi  于 2023-02-16  发布在  SQLite
关注(0)|答案(1)|浏览(222)

我正在用SQLite做一个Todo-List GUI项目,用于存储任务列表。
显然,我可以使用以下方法得到表的第n行:SELECT * FROM TABLE WHERE LIMIT n-1,1。但是显然没有删除第n行的选项?这是不存在的东西吗?我错过了什么吗?
我尝试执行DELETE FROM TABLE WHERE rowID = n,因为SQLite会为表中的行自动生成rowID,但问题是在我删除第n行之后,后续行的rowID不会更新。
我有一张和这个相似的table

| TaskName    | Notes     | Date    |
|-------------|-----------|---------|
| Get milk    | urgent    | ...     |
| Exercise    | leg day   | ..      |
| Meeting     | afternoon | ...     |

因此,理想情况下,我需要的是某个命令,当我告诉它删除第二行时,它应该给予输出--〉

| TaskName    | Notes     | Date    |
|-------------|-----------|---------|
| Get milk    | urgent    | ...     |
| Meeting     | afternoon | ...     |

当我对第二行再次执行相同的命令时,应该会给予--〉

| TaskName    | Notes     | Date    |
|-------------|-----------|---------|
| Get milk    | urgent    | ...     |

为了实现此基本功能,我应该做/实现什么?

ki0zmccv

ki0zmccv1#

数据库表中的行表示无序数据集。此表:
| 任务名称|附注|日期|
| - ------|- ------|- ------|
| 去拿牛奶|急件|...|
| 运动|航段日|......|
| 会议|下午|...|
和这个表格是一样的
| 任务名称|附注|日期|
| - ------|- ------|- ------|
| 去拿牛奶|急件|...|
| 会议|下午|...|
| 运动|航段日|......|
还有这个
| 任务名称|附注|日期|
| - ------|- ------|- ------|
| 运动|航段日|......|
| 去拿牛奶|急件|...|
| 会议|下午|...|
那么,如果你想删除第二行,你在这里称哪一行为"second"呢?
假设日期是唯一的,并且您讨论的是按日期排序的行,则:

delete from mytable where rowid =
  (select rowid from mytable order by date limit 1,1);

相关问题