首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在MySQL中删除后自动增加

在MySQL中删除后自动增加
EN

Stack Overflow用户
提问于 2010-02-07 02:21:01
回答 14查看 189.5K关注 0票数 80

我有一个主键字段为AUTO_INCREMENT on的MySQL表。在阅读了这里的其他帖子后,我注意到有些人也有同样的问题,但答案却各不相同。一些人建议不要使用这个功能,另一些人则认为它不能被“修复”。

我有:

代码语言:javascript
复制
table: course
fields: courseID, courseName

示例:表中的记录数: 18。如果我删除记录16、17和18 -我希望输入的下一条记录的courseID为16,但它将是19,因为最后输入的courseID是18。

我的SQL知识并不惊人,但是有没有办法通过查询(或phpMyAdmin界面中的设置)来刷新或更新这个计数呢?

此表将与数据库中的其他表相关。

考虑到所有的建议,我决定忽略这个“问题”。我将简单地删除和添加记录,同时让自动递增做它的工作。我猜数字是什么并不重要,因为它只被用作唯一标识符,并没有(如上所述)业务意义。

对于那些我可能对我的原始帖子感到困惑的人:我不希望使用这个字段来了解我有多少条记录。我只是想让数据库看起来整洁一点,并有更多的一致性。

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2010-02-07 02:35:37

您尝试做的事情听起来很危险,因为这不是AUTO_INCREMENT的预期用途。

如果你真的想找到最小的未使用的密钥值,那就完全不要使用AUTO_INCREMENT,手动管理你的密钥值。但是,这不是推荐的做法。

退一步,问一问“为什么需要回收键值?”无符号INT (或BIGINT)是否没有提供足够大的密钥空间?

在您的应用程序的生命周期中,您真的会拥有超过18,446,744,073,709,551,615的唯一记录吗?

票数 79
EN

Stack Overflow用户

发布于 2010-02-07 02:28:28

数据库中的主自增量键用于唯一标识给定行,不应赋予任何业务意义。因此,保留主键不变,并添加另一个名为courseOrder的列。然后,当您从数据库中删除一条记录时,您可能想要发送一个额外的UPDATE语句,以便递减所有行的courseOrder列,这些行的courseOrder大于当前要删除的行。

另外,您永远不应该修改关系数据库中主键的值,因为可能有其他表将其引用为外键,而修改它可能违反引用约束。

票数 17
EN

Stack Overflow用户

发布于 2010-02-07 02:30:51

您不应该依赖AUTO_INCREMENT id来告诉您表中有多少条记录。您应该使用SELECT COUNT(*) FROM course。ID用于唯一标识课程,并可用作其他表中的引用,因此您不应重复ID,也不应尝试重置自动递增字段。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2214141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档