我正在创建一个存储联系人的sql数据库.我希望能够删除联系人,并且每个联系人的正确ID对于我连接到它的软件至关重要.让我们说我有联系詹姆斯,他是第一个.他的身份证是0.我加上玛丽,她的身份证是1.如果我删除詹姆斯,玛丽的身份证如何设置为0而不是1?它必须重置,因为她现在是第一个.换句话说,当有人被删除时,如何重置数据库中的所有ID?谢谢
解决方法
在自动递增的主键列上执行此操作是没有意义的,因为即使这样做很简单,在相关表中没有大量更新也会影响数据完整性.为此,您可能需要从列中删除索引和主键约束(此时应用程序可能会剥落),重新编号所有后续记录,重新编号所有相关表,然后重新应用主键约束和索引.
如果你真的必须有某种形式的线性标识符,它始终从0开始(这可能表明软件设计有问题)那么除了主键之外你还可以有一个辅助ID列,然后你可以更新以更高值用一句话来表达如下:
UPDATE table SET secondaryID = secondaryID - 1 WHERE secondaryID > (SELECT secondaryID FROM table WHERE primaryID = [id to delete]); DELETE FROM table WHERE primaryID = [id to delete];