› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
good
0D
V2EX  ›  MySQL

MySQL 自增如何跳过一些特定的数字集?就像 QQ 号自增,保留部分靓号一样~

  •  
  •   good · May 17, 2015 · 6397 views
    This topic created in 4167 days ago, the information mentioned may be changed or developed.
    14 replies  •  2015-05-18 11:08:53 +08:00
    Septembers
        1
    Septembers  
       May 17, 2015
    TRIGGER?
    abelyao
        2
    abelyao  
       May 17, 2015 via iPhone
    方法有许多,举个例子:
    日常在自增记录之后,判断 id 是否属于靓号,是的话把这条记录清空,或者标注特定属性,然后重新自增一条记录给刚刚注册的用户。
    good
        3
    good  
    OP
       May 17, 2015
    @abelyao 这个方法 如果碰到有 靓号是连续的就不是很好了~
    Septembers
        4
    Septembers  
       May 17, 2015
    触发器啊
    注册(insert)的时候 检查ID 是否是 保留用户ID表 中的
    如果是ID+1、更新自增+1
    oott123
        5
    oott123  
       May 17, 2015 via Android
    可以考虑不使用自增…另外生成一个数字用来当号码
    dorentus
        6
    dorentus  
       May 17, 2015
    QQ 号不是自增的,大致上是有一个预先生成的号池(生成的时候就剔除了靓号),注册的时候都是从号池里面取号的。
    est
        7
    est  
       May 17, 2015
    alter table xxxx_table AUTO_INCREMENT = 123123123;
    abelyao
        8
    abelyao  
       May 17, 2015
    @good
    连续一两个的话,现在的处理速度不需要担心,而且… 连续太多个的那些真的是靓号吗?
    前面有朋友提到预先号码池,这也是一个方案(大多数都使用的方案),但号码池你要预算好自己的注册增长速度,可能得事先产生 10W 甚至 100W 行记录,这个初期来说还不如我说的那种方式。
    ThisDay
        9
    ThisDay  
       May 17, 2015
    数据量不大的花2楼即可
    shuiniushushu
        10
    shuiniushushu  
       May 17, 2015
    这种需求用自增不好操作。你可以用一个表来生成自增id,这个表记录着上一次自增的状态,姑且叫做max_id表,我就是这样做的
    orzfly
        11
    orzfly  
       May 17, 2015
    @abelyao 不用事先产生这么多记录啊,一个进程生成的同时一边发号也可以啊……

    只要池里的数量一直大于并发数就行了啊……
    good
        12
    good  
    OP
       May 18, 2015
    @shuiniushushu 没太明白你的意思.和号池是一个意思吗?
    oott123
        13
    oott123  
       May 18, 2015 via Android
    @abelyao 其实还真有连续好多个的…
    比如 88880000 ~ 88889999 这算是连续一万个了吧…
    shenmimu
        14
    shenmimu  
       May 18, 2015 via iPhone
    自增id最好不要有业务含义比较好吧,是不是用一个偏移量表来生成号码比如 偏移量a+id ID是自增字段 作为号码
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1058 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 18:47 · PVG 02:47 · LAX 11:47 · JFK 14:47
    ♥ Do have faith in what you're doing.