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

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

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

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

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

    int id = V / 32;

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

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

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