字符串id生成示例

来源:互联网 发布:推广平台源码 编辑:程序博客网 时间:2024/05/29 16:19

博客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,当业务量大时可能不满足需求,可以增加序号的位数,或者根据链接中的其他算法产生。

原创粉丝点击