Omi*_*uri 64 mysql sql primary-key auto-increment
我有一个MySQL表,主键字段打开AUTO_INCREMENT.在阅读了这里的其他帖子之后,我注意到有相同问题并且答案各不相同的人.有人建议不要使用此功能,其他人说它不能"修复".
我有:
table: course
fields: courseID, courseName
Run Code Online (Sandbox Code Playgroud)
示例:表中的记录数:18.如果我删除记录16,17和18 - 我希望输入的下一条记录的课程ID为16,但是它将是19,因为最后输入的课程ID是18.
我的SQL知识并不令人惊讶,但无论如何使用查询(或phpMyAdmin界面中的设置)刷新或更新此计数?
该表将与数据库中的其他表相关.
鉴于所有的建议,我决定忽略这个'问题'.我将简单地删除并添加记录,同时让自动增量完成它的工作.我想这个数字到底是什么并不重要,因为它只被用作唯一标识符,并且没有(如上所述)商业含义.
对于那些我可能与我的原帖混淆的人:我不想用这个字段来知道我有多少记录.我只是希望数据库看起来整洁,并且具有更多的一致性.
Dol*_*lph 67
你想要做的事情听起来很危险,因为这不是预期的用途AUTO_INCREMENT
.
如果您确实想要找到最低的未使用键值,请不要使用AUTO_INCREMENT
,并手动管理您的键.但是,这不是推荐的做法.
退后一步,询问" 为什么需要回收键值? "未签名INT
(或BIGINT
)是否提供足够大的密钥空间?
18,446,744,073,709,551,615
在应用程序的生命周期中,您真的会拥有超过独特的记录吗?
mon*_*ksp 35
ALTER TABLE foo AUTO_INCREMENT=1
Run Code Online (Sandbox Code Playgroud)
如果您删除了最新的条目,则应将其设置为使用下一个最低条目.如同,只要没有19,删除16-18将重置自动增量使用16.
编辑:我错过了关于phpmyadmin的一点.你也可以在那里设置它.转到表格屏幕,然后单击"操作"选项卡.那里有一个AUTOINCREMENT
字段,您可以手动设置任何需要的字段.
Dar*_*rov 16
数据库中的主要自动增量键用于唯一标识给定行,不应给出任何业务含义.因此,保持主键不变,并添加另一个名为例如的列courseOrder
.然后,当您从数据库中删除记录时,您可能希望发送一个额外的UPDATE语句,以便减少courseOrder
所有courseOrder
大于您当前正在删除的行的列.
作为旁注,您永远不应该修改关系数据库中主键的值,因为可能有其他表将其作为外键引用,并且修改它可能违反引用约束.
小智 10
试试:
SET @num:= 0;
UPDATE your_table SET id = @num:=(@ num + 1);
ALTER TABLE
tableName
AUTO_INCREMENT = 1;
这将重置自动增量值,然后在为其创建新值时计算每一行.
例子:之前
所以表格将显示数组:1,2,4,5
示例:AFTER(如果您使用此命令,您将获得)
没有删除值的痕迹,其余的增量继续使用此新计数.
但
归档时间: |
|
查看次数: |
141543 次 |
最近记录: |