gpt4 book ai didi

java - 如何确保主键值没有间隙,即使在删除之后也是如此?

转载 作者:行者123 更新时间:2023-12-01 12:49:15 26 4
gpt4 key购买 nike

我正在从数据库表中删除一些行。然后我想更新其他行的ID。

例如,这是我的表:

id |   name
1 | aaaa
2 | bbbb
3 | cccc
4 | dddd

现在我删除第 3 行。我想要得到一个像这样的表:

id |   name
1 | aaaa
2 | bbbb
3 | dddd

但是我得到了这张表:

id |   name
1 | aaaa
2 | bbbb
4 | dddd

这是我的代码:

    SparseBooleanArray checkedItemPositions = getListView()
.getCheckedItemPositions();
int itemCount = getListView().getCount();
int[] tab = new int[itemCount];

for (int i = itemCount - 1; i >= 0; i--) {

tab[i] = itemCount - i;

if (checkedItemPositions.get(i)) {
adapter.remove(list.get(i));
db.deleteMyPlace(new MyPlacesTable(tab[i]));

}

}

以及删除方法

public void deleteMyPlace(MyPlacesTable myPlace) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_MY_PLACES, KEY_ID + " = ?",
new String[] { String.valueOf(myPlace.getID()) });
db.close();
}

我能做什么?

最佳答案

当你删除一个键时,你需要对所有大于它的值进行重新编号,将它们减一。如果这听起来很昂贵,那是因为它确实很昂贵。顺便说一句,您还必须对这些 ID 的所有引用重新编号。

一个更便宜的替代方案是将最后一个条目移动到已删除的条目。这减少了需要更改的条目数量,但更新的复杂性和要更改的表的数量是相同的。

通常最简单的解决方案是不更改 ID,因为创建空白或创建新 ID 不需要任何成本。然而,对它们进行重新编号既昂贵又棘手。

关于java - 如何确保主键值没有间隙,即使在删除之后也是如此?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24376541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com