从表中删除后自动递增[重复]

Posted

技术标签:

【中文标题】从表中删除后自动递增[重复]【英文标题】:auto increment after delete from a table [duplicate] 【发布时间】:2011-09-23 02:11:45 【问题描述】:

可能重复:mysql: Reorder/Reset auto increment primary key?

如果我从我的表中删除一个 ligne 并且在这个表中我有一个自动增量 ID, 从 id=2 的表中删除

之后的表格会是这样的

 ID   | NAme
1        aaa
3        cccc

我怎样才能把ID改成这样

ID   | NAme
1        aaa
2        cccc
3        dddd  

【问题讨论】:

我不知道你为什么要这样做,ID 自动递增是有原因的。 当然,您不会想要这样做。这可能会导致危险的混乱...... +1 提出非常好的问题 这有一个严重的缺点,您或 DBMS 必须在删除记录后重新组织所有记录。不仅如此,如果 ID 是您的主键,所有依赖表也需要更新(以保持参照完整性)。一般primary keys should never change. 【参考方案1】:

自动增量不能以这种方式工作。如果您在 ID 为 1 和 2 的表上有 2 条记录,并且您删除了 ID 为 2 的记录,那么下一条记录将始终为 3。

出于您需要的原因,建议您添加包含这些值的附加列。

另外,我很久以前在学校了解到,在伟大的系统中,永远不会删除记录。有一列包含时间戳值,将它们标记为“已删除”。

【讨论】:

软删除是设计决策,而不是规则。它最常用于支持数据仓库。【参考方案2】:

看看这个答案:Reorder / reset auto increment primary key

【讨论】:

我认为这是错误的做事方式。想到了错误的数据库设计。永远不需要重新评估自动增量字段。 这是评论,不是答案。应该被选为重复的问题。 这不是一个解决方案。不好的做法!

以上是关于从表中删除后自动递增[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从表中删除重复值 [重复]

如何从表中删除重复记录? [复制]

从表中的多个重复项中删除特定记录

BigQuery 标准 SQL:从表中删除重复项

在Oracle中从表中删除重复行

从表中删除重复的 ID - 性能改进