欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

生成自增流水号

程序员文章站 2022-04-04 21:55:20
...

流水号自增规则:时间(天) +  自增流水(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

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

 

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

相关标签: java sql