首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
gebishushu
V2EX  ›  问与答

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

  •  
  •   gebishushu · 50 天前 · 1397 次点击
    这是一个创建于 50 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    23 回复  |  直到 2019-12-04 16:17:11 +08:00
    msg7086
        1
    msg7086   50 天前
    id 原本就是一条记录的固定标识,原本就不应该被修改。
    修改 id 本来就相当于重新建表了(因为所有的关联表都会炸)。

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

    感谢各位大佬的回复,确实如楼上所言,打算把展示的美观些,看来重新建个新表做这个事情才是最正确的原则
    opengps
        18
    opengps   49 天前
    ID 该有还得有,额外增加一个程序递增排序列实现吧
    optional
        19
    optional   49 天前
    一般人想要递增非连续的 id
    godwinma
        20
    godwinma   49 天前
    你这想法,纯属强迫症作祟,何必呢? id 连续除了带来更复杂的东西,额外收益是什么?
    lxk11153
        21
    lxk11153   49 天前
    递增连续 id 还容易被暴力爬~
    ipwx
        22
    ipwx   49 天前
    @gebishushu 你难不成认为一个毫无意义的数字是对一般人友好的?

    给个建议,为每个文章,根据标题生成一个有意义的 slug,然后通过 slug 查找这篇文章。这才是对一般人有意义的做法。
    arthas2234
        23
    arthas2234   49 天前
    @lxk11153 这个我还真见过,很久之前了,发现一个论坛的获取用户信息的 url 是 /users/{id},id 是个三位数字,我就好奇是不是自增的。结果还真是,而且还没做鉴权,拿到一堆用户信息,不过就是一个小论坛估计是学生搞得
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2198 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 27ms · UTC 03:05 · PVG 11:05 · LAX 19:05 · JFK 22:05
    ♥ Do have faith in what you're doing.