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

2015-05-17 13:51:50 +08:00
 good
5294 次点击
所在节点    MySQL
14 条回复
Septembers
2015-05-17 14:02:33 +08:00
TRIGGER?
abelyao
2015-05-17 14:05:17 +08:00
方法有许多,举个例子:
日常在自增记录之后,判断 id 是否属于靓号,是的话把这条记录清空,或者标注特定属性,然后重新自增一条记录给刚刚注册的用户。
good
2015-05-17 14:22:11 +08:00
@abelyao 这个方法 如果碰到有 靓号是连续的就不是很好了~
Septembers
2015-05-17 14:27:02 +08:00
触发器啊
注册(insert)的时候 检查ID 是否是 保留用户ID表 中的
如果是ID+1、更新自增+1
oott123
2015-05-17 14:27:05 +08:00
可以考虑不使用自增…另外生成一个数字用来当号码
dorentus
2015-05-17 14:27:26 +08:00
QQ 号不是自增的,大致上是有一个预先生成的号池(生成的时候就剔除了靓号),注册的时候都是从号池里面取号的。
est
2015-05-17 14:35:04 +08:00
alter table xxxx_table AUTO_INCREMENT = 123123123;
abelyao
2015-05-17 14:42:54 +08:00
@good
连续一两个的话,现在的处理速度不需要担心,而且… 连续太多个的那些真的是靓号吗?
前面有朋友提到预先号码池,这也是一个方案(大多数都使用的方案),但号码池你要预算好自己的注册增长速度,可能得事先产生 10W 甚至 100W 行记录,这个初期来说还不如我说的那种方式。
leeyuzhe
2015-05-17 20:46:48 +08:00
数据量不大的花2楼即可
shuiniushushu
2015-05-17 23:30:36 +08:00
这种需求用自增不好操作。你可以用一个表来生成自增id,这个表记录着上一次自增的状态,姑且叫做max_id表,我就是这样做的
orzfly
2015-05-17 23:59:13 +08:00
@abelyao 不用事先产生这么多记录啊,一个进程生成的同时一边发号也可以啊……

只要池里的数量一直大于并发数就行了啊……
good
2015-05-18 00:53:24 +08:00
@shuiniushushu 没太明白你的意思.和号池是一个意思吗?
oott123
2015-05-18 01:14:27 +08:00
@abelyao 其实还真有连续好多个的…
比如 88880000 ~ 88889999 这算是连续一万个了吧…
shenmimu
2015-05-18 11:08:53 +08:00
自增id最好不要有业务含义比较好吧,是不是用一个偏移量表来生成号码比如 偏移量a+id ID是自增字段 作为号码

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

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

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

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

© 2021 V2EX