mysql 如何通过配置文件修改让 id 自增连续起来呢?

2019-12-04 04:45:22 +08:00
 gebishushu

id 为主键且自增,由于数据表数据删除等问题,id 会断续 我查到几条命令可以搞,但是总不能每次删除后再执行下这个命令吧 所以有没有一次性修改好的办法呢?

3023 次点击
所在节点    问与答
23 条回复
msg7086
2019-12-04 07:00:37 +08:00
id 原本就是一条记录的固定标识,原本就不应该被修改。
修改 id 本来就相当于重新建表了(因为所有的关联表都会炸)。

如果你需要一个连续的 id,那就不应该去用自增主键。自增主键本来就会变得不连续。
opengps
2019-12-04 07:24:32 +08:00
程序处理,不用自增
JiShuTui
2019-12-04 08:29:54 +08:00
请说出你的最原始需求来,可能你对需求理解有误。
活了三十年,第一次听说有人想改 id,而且改 id 的目的竟然是为了 id 连续。
lhx2008
2019-12-04 08:30:33 +08:00
可能只是强迫症了吧
littlemoney
2019-12-04 09:11:11 +08:00
id 不连续的问题是啥呢?
qping
2019-12-04 09:22:26 +08:00
如果你的需求是:根据连续的 id 可以知道某一个记录的上一条或者下一条记录,比如博客上一篇或者下一篇功能。
不应该修改 id,而是额外增加一个字段,存储连续的字段。
或者在一条记录中记录上一条或者下一条是记录是什么。
qping
2019-12-04 09:25:16 +08:00
一般 id 是聚簇索引,是数据记录真实写入到硬盘的位置,修改某一条记录的 id 会导致这条记录之后全部的数据都被移动重写,导致巨大的磁盘 IO,是很恐怖的想法
fancy111
2019-12-04 09:29:41 +08:00
很简单的问题,你需要完全连续的话,每次删除记录好被删的 ID,下次添加记录的时候写死 ID 插入,之后再删除这个记录就好。无记录的情况下自增。
Woood
2019-12-04 09:34:18 +08:00
你为什么删除的时候不假删除呢
DeweyLiu0
2019-12-04 09:34:54 +08:00
曾经我也有过这样的强迫症😄然后就思考为什么新创建的不是接着上面的呢?
jeymingwu
2019-12-04 09:36:33 +08:00
盲猜是在前端展示更美观?
agee
2019-12-04 09:39:19 +08:00
展示 id 为什么要和数据库 id 一致,新加一个用于展示的字段不就好了,还能卖靓号♞
SjwNo1
2019-12-04 09:43:54 +08:00
物理删除可还行
ShundL
2019-12-04 09:44:53 +08:00
搞个 redis list 保存已删除的 id,每次删除时把 Id 放到 list 里,下次要插入时优先从 list 里取, 哈哈哈哈哈哈。。。
Egfly
2019-12-04 09:45:29 +08:00
不知道你的需求是什么,改 id 会带来大量的磁盘 IO,除非你这里的 id 不是索引。建议去看一下[mysql 索引原理]( https://juejin.im/post/5bd7a97de51d45400d5d7b18)。
hoythan
2019-12-04 10:57:50 +08:00
吧 ID 一列删除,重新添加一列 ID,可以重置所有的 ID 顺序,简单明了,赶紧试试吧。
gebishushu
2019-12-04 12:19:57 +08:00
@msg7086
@opengps
@JiShuTui
@lhx2008
@qping
@fancy111
@DeweyLiu0
@Egfly
@hoythan

感谢各位大佬的回复,确实如楼上所言,打算把展示的美观些,看来重新建个新表做这个事情才是最正确的原则
opengps
2019-12-04 12:33:43 +08:00
ID 该有还得有,额外增加一个程序递增排序列实现吧
optional
2019-12-04 12:36:17 +08:00
一般人想要递增非连续的 id
godwinma
2019-12-04 14:36:49 +08:00
你这想法,纯属强迫症作祟,何必呢? id 连续除了带来更复杂的东西,额外收益是什么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/625707

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX