如何删除数据库记录并重用已删除的主键?

时间:2016-06-22 10:40:18

标签: sql database

我在VS 2016中创建了一个数据库。我还编写了一个WebApplication(ASP.Net/C#/Entity Framework),我可以在不同的文本框中输入不同的值。这些保存在我的数据库中。每条记录都会收到一个ID(主键)。

假设我有5条记录,ID为1-5。如果我在删除这5个ID后创建新记录,则新记录的ID为6,但我希望重用ID为1。

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:3)

我假设您正在使用自动增量为Id列分配新的键值。你假设因为没有记录,那么下一个自由值将是1,但它只是从前一个最高值开始递增。

这是一个糟糕的主意,但如果您真的希望回收键值,那么您可以自行关闭自动增量并手动管理键值,但这很容易出错。

你真的需要这样做吗? Int和BigInt可以容纳非常大的数字,你是否可能用完关键值以便可能需要回收?

如果您只想将自动增量重置为1 I suggest you look at this post

答案 1 :(得分:2)

这不是问题。您的数据库具有Primery Key with Identity(1,1)。每条新记录的ID都会大于最后添加的记录。

如果要删除所有可以使用的行

TRUNCATE TABLE tablename

。 否则您可能会考虑关闭自动增量并为ID提供数字,以及在您的表格中查找较小的免费ID。

答案 2 :(得分:1)

  

假设我有5条记录,ID为1-5。如果我在删除这5个ID之后创建一个新记录,那么新记录的ID是6,但它应该是1。

您的id列似乎是Identity.You需要在每次删除5行后使用command以下,以便从1再次开始您的值

DBCC CHECKIDENT (yourtable, RESEED, 1);

除非你截断表,否则这不会工作,因为你在Id上有一个主键,所以你需要处理你的主键策略

答案 3 :(得分:1)

因为SQL Server没有跟踪删除的唯一标识符,所以你只有一个选项可以重置

DBCC CHECKIDENT (yourtable, RESEED, 0);

这不是您要找的,但SQL服务器不会跟踪哪些内容被删除。