删除的记录没有给我他们的 ID
Posted
技术标签:
【中文标题】删除的记录没有给我他们的 ID【英文标题】:Deleted record are not giving me their ID back 【发布时间】:2021-12-20 10:57:28 【问题描述】:如果我从表中删除一条记录,然后创建一条新记录,它确实会重用已删除记录中的 ID - 在顺序 ID 中留下空白。有人能帮忙吗? 我相信受影响的代码在这里:
def Delete():
#open database
Database()
if not tree.selection():
tkMessageBox.showwarning("Warning","Select data to delete")
else:
result = tkMessageBox.askquestion('Confirm', 'Are you sure you want to delete this record?',
icon="warning")
if result == 'yes':
curItem = tree.focus()
contents = (tree.item(curItem))
selecteditem = contents['values']
tree.delete(curItem)
cursor=conn.execute("DELETE FROM REGISTRATION WHERE RID = %d" % selecteditem[0])
conn.commit()
cursor.close()
conn.close()
这是我的输出 - 请注意删除记录的顺序间隙:
【问题讨论】:
这是几乎所有数据库引擎中的预期行为,原因有很多(外键完整性超出了我的想象,还有其他原因)。为什么会困扰你? @Marat - 不是真的,但我认为这是异常行为,因为我使用的另一个没有这样做。如果我删除了记录 1,下一条记录输入将进入该插槽。我是初学者,所以将其归结为缺乏经验。 【参考方案1】:SQLite 定义一个 INTEGER PRIMARY KEY 作为 ROWID 的别名,documents the ROWID selection algorithm 为:
如果插入时没有指定 ROWID,或者指定的 ROWID 的值为 NULL,则自动创建适当的 ROWID。通常的算法是给新创建的行一个比插入前表中最大的 ROWID 大一的 ROWID。如果表最初为空,则使用 1 的 ROWID。
所以,这是意料之中的。除非您删除 ID 最高的行,否则将使用新 ID。
【讨论】:
即使我删除了最后一个条目(最高 ID),它也会在下一个条目时跳过该 ID。但我从文档中看到 AUTOINCREMENT 导致:以上是关于删除的记录没有给我他们的 ID的主要内容,如果未能解决你的问题,请参考以下文章