`

生成自增流水号

阅读更多

流水号自增规则:时间(天) +  自增流水(000)

例如:20150109001,20150109016,20150110001

 

思路一:

    思路:java通过static 和 synchronized来实现

    问题:如果是单纯的一个静态变量,那么如果服务器意外重启,这个变量会从0开始。

    解决:如果是0的话去持久化介质中验证是否这天从0开始

    总结:java 内存方式固然性能好,实现简单,但是毕竟不是从实际持久化取值,会有数据不同步的情况。

 

思路二:

    思路:通过sql实现,把并发问题交给数据库处理

 

    mysql:

Sql代码 
  1. INSERT INTO tmp_order (orderNum) (  
  2. SELECT CONCAT('20150202',liushui)  FROM   
  3. (  
  4. SELECT   
  5. CASE  
  6.   WHEN orderNum IS NULL THEN '001'  
  7.   WHEN RIGHT(MAX(orderNum),3)+1 <10 THEN CONCAT('00',RIGHT(MAX(orderNum),3)+1)  
  8.   WHEN RIGHT(MAX(orderNum),3)+1 <100 THEN CONCAT('0',RIGHT(MAX(orderNum),3)+1)  
  9.   ELSE RIGHT(MAX(orderNum),3)+1 END liushui FROM  tmp_order t  
  10. WHERE t.orderNum LIKE '20150202%'  
  11. ) t1  
  12. )  

    如果不加日期的纯流水可以考虑使用zerofill

    如果担心数据库的并发处理会出问题,可以将这个字段设置成唯一,前台做良好的错误提示或自动提交。

 

    以上只是个人浅见,欢迎大家指教讨论~

1
5
分享到:
评论
2 楼 snkcxy 2015-01-09  
HRoger 写道
采用思路一,如果系统重启首先去数据库查询最新的订单编号,然后将变量赋值就可以了

数据库方式为什么不采用呢?
1 楼 HRoger 2015-01-09  
采用思路一,如果系统重启首先去数据库查询最新的订单编号,然后将变量赋值就可以了

相关推荐

    C#生成流水号小代码

    自己写的一点小代码,多有不当,请指正! public string GetAutoDocNo() { string DocNo = "AD"; string today = DateTime.Today.Date.ToString("yyyyMMdd", DateTimeFormatInfo.InvariantInfo);...

    mysql创建流水号,用的纯sql语句

    mysql创建流水号,以前也一直不知道怎么写,最后我知道了,然后我保存了下来,用的纯sql语句,不需要后台java或者别的语言去生成。直接数据库的sql语句就行了。我设置的积分是1分。要是增加了,就是CSDN增加的,

    JAVA生成订单号(日期+流水号)

    JAVA生成订单号(日期+流水号) java按日期加流水号方式生成订单号,已经测试过,可递增方式生成。

    java生成流水-格式202001270001

    1、每天都会生成初始值1,且递增的流水号 2、不存在多线程问题

    自动增长列的编号生成

    自动增长列的编号生成,减少连数据库的次数,非常的实用

    c#后台生成不重复的订单号及后台存储过程

    SQL,C#,不重复编码,订单号 1. C#后台封装方法 通用获取最大单据编号, 可以生成以下3个类型的单号 CG1603-000001 CG201603-000001 CG20160321-000001

    生成以日期开头,加4位数字,每次加1的工具类.如:201712140001

    生成以日期开头,加4位数字,每次加1的工具类.如:201712140001,201712140002,201712140003

    自动生成不重复无序化id

    这是自动生成不重复主键的代码包,直接导包进入程序即可使用,帮助生成由字母数字组成的16位id号,可以用于数据库主键存储(使用数据库自增主键始终有问题,不适合大型程序的使用),该代码包运用于很多大型企业级...

    EXCEL物料编码自动生成.xlsx

    自己参考网上下载的EXCEL资源制作的BOM物料编码自动生成,可以自己修改成适合自己公司的类型,增减BOM编码组成部分等等操作,表格能根据相同类别产品出现的次数流水号自增

    c# 按日期+序号进行自动编号

    在网上搜了半天,都没有看到满意的程序。只好参照别人写的例子,自己写了。编号是按照年份和月份+三位序号自动生成的,用的是SQL server数据库,用VS2010编写的。调试已通过。希望给同为新手的各位一个参考。

    OrderNo.rar

    依据日期+流水号生成订单号 日期(YYYYMMDD)+流水自增(00001)

    免序列号 witclient

    值为AUTOSEQ表示参数为自动自增流水号。 参数为日期时间支持初始化值为NOW,即参数的INIT=”NOW”,实时获取时间。 软件应用 一:信息化应用 如:家庭财务管理,电话簿,个人数据的录入,更新,查询等。 二:...

    Access自动编号

    实现日期自动编号的类,在ACCESS下面,实现前缀字符+日期+流水号的自动编号类.

    (银行卡)数据库设计报告.doc

    " "t_menuInfo "菜单表 "管理系统菜单 " "t_importTmp "导入数据临时表 "校验银行卡数据 " "t_importHistory"导入数据历史表 "归档导入数据 " "t_billSequenceT"操作流水临时表 "生成流水号 " "mp " " " "t_...

Global site tag (gtag.js) - Google Analytics