依靠数据库自身机制产生含顺序码的编号

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

实际项目中经常有产生结构复杂的编号的业务需求,例如用户表中有个字段叫LUID是公司统一用户识别号,当每次注册一个用户时,需要产生一个不重复的LUID,他的产生规则比如是3位随机码+12位顺序码+3位随机加校验码。

3位随机码生成很简单,顺序码比如从10000000开始,每次加1,最后的3位随机加校验码是通过随机生成的码和顺序码再经过计算得到,这个只要有了顺序码,就可以产生了。

所以重点还是顺序码怎么产生?

通常就是通过上一条用户信息的ID字段来生成,因为ID是数据库自增1产生的,正好满足了顺序码每次加1的需求,在这里ID+10000000就是顺序码了。但是得考虑并发的问题,就是当两个用户同时注册时,大家都去拿上一条的用户Id,因为大家都还没执行插入提交事务,所以拿到的id一样,那顺序码就一样了,这明显就产生了并发问题!为了防止并发时产生的顺序码一致,可以通过给表加锁,锁住表之后,再select获取最近的一条用户记录的主键ID,然后就可以产生LUID了,然后插入数据库后,最后释放锁。但是这样做会性能很慢,因为你锁表了,导致不能对该表进行增删改。

还有一种思路,就是利用数据库自身的机制来完成。可以在用户表中再新增一个带有唯一性约束的字段,比如verifyCode,当注册时,从用户表中查到最近的用户信息,依然通过这条信息的ID字段值产生顺序码,从而产生LUID,然后verifyCode的值就设置为ID的值+1,然后插入用户表。当有一条并发了,那它获取的ID和之前的那条是一样的,那verifyCode值也一样,那当这条在插入用户表时会报错,因为verifyCode是唯一的,不允许重复,这时候是数据库报错了,然后我们就可以提示用户注册失败,请稍后再试!这样就解决了问题,而且不需要加性能昂贵的锁了!

这一切的重点就是数据库的自身机制:唯一性约束的字段不允许重复。

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值