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

数据库表 id 设为 auto_increment 是不是一个好习惯?

  •  
  •   jsxqf · 2014 年 7 月 30 日 · 5125 次点击
    这是一个创建于 4183 天前的主题,其中的信息可能已经有所发展或是发生改变。
    19 条回复    2014-07-30 23:56:54 +08:00
    rainysia
        1
    rainysia  
       2014 年 7 月 30 日
    看情况而言
    有些情况需要自增来设置log_id, 至少能保证唯一性
    有些情况下就需要用代码直接生成id, 预生成id模式
    你去看电商的uid, pid, 淘宝店铺的店铺id, qq号. 这些实际都是自增的.
    em70
        2
    em70  
       2014 年 7 月 30 日 via Android
    不自增你还要id干嘛
    raincious
        3
    raincious  
       2014 年 7 月 30 日
    @rainysia QQ号是自增?我一直以为是分配好了放在一个池子里的呢。
    wy315700
        4
    wy315700  
       2014 年 7 月 30 日
    @rainysia
    @raincious
    QQ号是根据某个算法算出来的伪自增。

    话说你们俩的ID。。。
    kmvan
        5
    kmvan  
       2014 年 7 月 30 日 via Android
    你们两个的id也是自增的吧!
    我帮楼上说了
    Aoliz
        6
    Aoliz  
       2014 年 7 月 30 日
    有时候为了防止爬虫爬数据,会选择不自增的方式?
    shinwood
        7
    shinwood  
       2014 年 7 月 30 日
    自增要有一个,另外可以加设一个唯一的id防爬虫。
    em70
        8
    em70  
       2014 年 7 月 30 日
    @wy315700
    @raincious
    @raincious

    QQ号绝对不是自增,有号码池,不一定先注册就比后注册数字小,特殊号码早就被提取出来单独销售了,没意义的号才放池子里.曾经听一个去腾讯实习的哥们说,QQ号只用了一个字节储存.
    raincious
        9
    raincious  
       2014 年 7 月 30 日
    @em70 真的?8 Bit?怎么做到的?
    O21
        10
    O21  
       2014 年 7 月 30 日
    我一般都用自增长。。。方便
    em70
        11
    em70  
       2014 年 7 月 30 日
    @raincious 我也没想明白,就算32位,也只有8位数,但现在QQ也10位了
    YouXia
        12
    YouXia  
       2014 年 7 月 30 日   ❤️ 2
    @em70
    应该不是一个字节,应该是一个int,一个int倒是足够存储了。假如QQ数字为V,则用以下方式表示:

    int id = V / 32;

    int shift = V % 32;
    jsonline
        13
    jsonline  
       2014 年 7 月 30 日   ❤️ 1
    上面不要搞笑,从 2011 年起 QQ 上是 64 位的,8 bytes, 64 bits.
    Automan
        14
    Automan  
       2014 年 7 月 30 日
    看应用场景吧。。比如优惠券号码之类的,就非常不适合用自增。另外多机负载下,自增 id的同步也是个大问题。
    Automan
        15
    Automan  
       2014 年 7 月 30 日
    在一般情况下,自增id算是效率最高最方便的产生唯一ID的方法了吧
    YouXia
        16
    YouXia  
       2014 年 7 月 30 日
    @jsonline

    只是举了例子说明了下一个int足够存储QQ所有号码了。

    另外,一般情况下(当然这个还是看编译器),多数64位系统下sizeof(int) = 4 ,只是long int 变为8了。
    awanabe
        17
    awanabe  
       2014 年 7 月 30 日   ❤️ 1
    自己做一个sequence吧...
    如果分布式的话就需要给集群不同的标示, 从而生成独立的id
    csx163
        18
    csx163  
       2014 年 7 月 30 日
    查询上下两条记录就靠这个了...
    rainysia
        19
    rainysia  
       2014 年 7 月 30 日
    晕. 我说的是最开始的时候, qq号是自增的...
    现在肯定都是预生成了.
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   3579 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 00:55 · PVG 08:55 · LAX 16:55 · JFK 19:55
    ♥ Do have faith in what you're doing.