我有一个主键字段为AUTO_INCREMENT on的MySQL表。在阅读了这里的其他帖子后,我注意到有些人也有同样的问题,但答案却各不相同。一些人建议不要使用这个功能,另一些人则认为它不能被“修复”。
我有:
table: course
fields: courseID, courseName
示例:表中的记录数: 18。如果我删除记录16、17和18 -我希望输入的下一条记录的courseID为16,但它将是19,因为最后输入的courseID是18。
我的SQL知识并不惊人,但是有没有办法通过查询(或phpMyAdmin界面中的设置)来刷新或更新这个计数呢?
此表将与数据库中的其他表相关。
考虑到所有的建议,我决定忽略这个“问题”。我将简单地删除和添加记录,同时让自动递增做它的工作。我猜数字是什么并不重要,因为它只被用作唯一标识符,并没有(如上所述)业务意义。
对于那些我可能对我的原始帖子感到困惑的人:我不希望使用这个字段来了解我有多少条记录。我只是想让数据库看起来整洁一点,并有更多的一致性。
发布于 2010-02-07 02:35:37
您尝试做的事情听起来很危险,因为这不是AUTO_INCREMENT
的预期用途。
如果你真的想找到最小的未使用的密钥值,那就完全不要使用AUTO_INCREMENT
,手动管理你的密钥值。但是,这不是推荐的做法。
退一步,问一问“为什么需要回收键值?”无符号INT
(或BIGINT
)是否没有提供足够大的密钥空间?
在您的应用程序的生命周期中,您真的会拥有超过18,446,744,073,709,551,615
的唯一记录吗?
发布于 2010-02-07 02:28:28
数据库中的主自增量键用于唯一标识给定行,不应赋予任何业务意义。因此,保留主键不变,并添加另一个名为courseOrder
的列。然后,当您从数据库中删除一条记录时,您可能想要发送一个额外的UPDATE语句,以便递减所有行的courseOrder
列,这些行的courseOrder
大于当前要删除的行。
另外,您永远不应该修改关系数据库中主键的值,因为可能有其他表将其引用为外键,而修改它可能违反引用约束。
发布于 2010-02-07 02:30:51
您不应该依赖AUTO_INCREMENT id来告诉您表中有多少条记录。您应该使用SELECT COUNT(*) FROM course
。ID用于唯一标识课程,并可用作其他表中的引用,因此您不应重复ID,也不应尝试重置自动递增字段。
https://stackoverflow.com/questions/2214141
复制相似问题