iOS App中的SQLite DB和表ID

时间:2012-09-17 17:14:57

标签: sqlite

我已经设法通过以下教程在iOS应用程序中创建SQLite数据库。我最初期待依赖主键。当时我不知道在SQLite中删除或重新创建主键是不可能的,现在我的应用程序很庞大,为了使它工作,我需要主键保持“有序”。

我正在开发一个任务管理器作为练习,我将数据直接从数据库加载到TableView,当我删除一行时,我需要修复主键索引。

目前,当我删除一行时会发生这种情况:

ID TXT STAT
1 some_text 1
2 some_text 1
4 some_text 1

正如您在删除行后可以看到主键ID跳过一个数字,我怎样才能将它变为1 2 3等...再次?

我真的不在乎你提出的解决方案是否浪费了很多资源,这只是一个练习而我需要它工作:D(我不会再犯这个错误!)

谢谢。

1 个答案:

答案 0 :(得分:2)

首先,将所有ID增加一个大于任何已使用ID的偏移量:

UPDATE mytab SET ID = ID + 1000

然后将ID设置为此记录的数量:

UPDATE mytab SET ID = (SELECT COUNT(*) FROM mytab t2 WHERE t2.ID <= mytab.ID)

(第一个UPDATE的原因是为了避免一条记录的新ID与另一条记录的旧ID相同的冲突。)