字符串id生成示例

博客http://www.cnblogs.com/haoxinyue/p/5208136.html中详细介绍了各算法及其优缺点,这里说一种比较简单的,有点类似文章中的snowflake算法,id组成为:标识符+年月日+序号,例如15位id表示为:“A20171102000001”,用一张表记录当前要生成id的业务的序号,表名:date_sequence,字段主要有三个:code,produce_date,num,code用来标识哪个业务模块的id,num表示该id目前的序号为多少,没产生一次id,该序号加一,这个表使用code和produce_date作为联合主键。此时的sql语句可以使用merge实现

<select id="getNextSequence" resultMap="BaseResultMap">
merge into date_sequence as dest
        using (values(#{code},convert(varchar(8),getdate(),112),1)) as src (code, producedate, num)
        on src.code = dest.code and src.producedate = dest.producedate
        when matched then update set dest.num= dest.num + 1
        when not matched then insert (code, producedate, num) values (src.code, src.producedate,src.num)
        output inserted.Code,inserted.produceDate,inserted.num;
</select>

不足之处:从示例”A20171102000001”可以看出,每天只能产生999999条id,当业务量大时可能不满足需求,可以增加序号的位数,或者根据链接中的其他算法产生。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值