数据表某个字段的数据有断层 现在连续生成的问题?

php中文网
发布: 2016-06-23 13:46:10
原创
1072人浏览过

有一个数据表  mem  里有字段  id sn (会员号)    原来会员号是手动填写的比如说  有数据  03117777777  ,03100005555,03100005556    sn是11位   但是数据sn 有的连续 有的不连续,有可能先填写是最大的号 ,后填写的最小的号   现在更改需求以后  不能动原来的数据 想要连续生成不能重复, 每注册一个会员生成一个会员号分给会员,怎么保证会员号不重复又能减少对比查询, 还有多个会员注册的并发问题  请教一下大家有没有好的解决办法

腾讯智影-AI数字人
腾讯智影-AI数字人

基于AI数字人能力,实现7*24小时AI数字人直播带货,低成本实现直播业务快速增增,全天智能在线直播

腾讯智影-AI数字人 73
查看详情 腾讯智影-AI数字人

回复讨论(解决方案)

先找到?定一?比?在所有???都大的???。
例如?在最大的???是03100005556 那麽下一????定?03100010000,中?相差的部分放?不用了。
然後每注?一?新用?,就用03100010000+id作????。

例如新??了用?id=5678,那????就是03100015678

 新???先插入??,?得id後再update sn,??就可以避免???突了。因?用主?做唯一。

先找到?定一?比?在所有???都大的???。
例如?在最大的???是03100005556 那麽下一????定?03100010000,中?相差的部分放?不用了。
然後每注?一?新用?,就用03100010000+id作????。

例如新??了用?id=5678,那????就是03100015678

 新???先插入??,?得id後再update sn,??就可以避免???突了。因?用主?做唯一。

 谢谢你的热心回答,对我很有启发,但是现在的数据表有些混乱,按照id号已办不到,因为当初这些数据是手动填写的,各种数据都可能存在,最大的会员号是03109999999

1.把你所有id取出来,得到最大的id,后期新增的数据,按照最大值后面新增。
2.用户注册并发,可以通过memcache或者redis,数据写入缓存当中。

你没有完全理解 fdipzone 的算法
他的意思是:
存在 id 和 sn 两列,id 为自增。
若 max(sn) = 03109999999
则有常量 n = max(sn) - max(id)
使得 n + (max(id)+1) = max(sn) = 03110000000
这样就从先前的混乱中走出来了,当然这就要缺失相当数量的 sn 资源

所以你也可以通过以下算法来完成补漏操作
select a.sn, b.sn as bsn from 表 a left join 表 b on a.sn+1=b.sn having bsn is null limit 1
这样就找到了一个不连续的 sn
sn + 1 就是该插入的 sn
只需在 sn 上建唯一索引,并在插入失败时重新尝试,就可解决并发问题
待表中 sn 的间歇全部充满后,再采用 dipzone 的算法(毕竟那样数据库运算量要小得多)

谢谢大家的热心解答 有点明白了 基础不大好 还得慢慢琢磨

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号