`

生成自增流水号

阅读更多

流水号自增规则:时间(天) +  自增流水(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#生成流水号小代码

    ### C#生成流水号小代码知识点解析 #### 一、代码功能概述 这段代码主要实现了在C#中自动生成带有日期的流水号的功能。流水号通常用于标识唯一性记录,例如订单编号、文档编号等。该代码通过结合当前日期与递增的...

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

    初始化原子整型为0,每次生成订单号时自增1,然后取其值作为流水号: ```java AtomicInteger sequence = new AtomicInteger(0); int seqNum = sequence.incrementAndGet(); ``` 流水号可以添加前导0,使其保持...

    生成并发唯一性流水号的解决方案.doc

    日期部分是使用当前日期的年月日,流水号部分是使用一个自增的数字。流水号的生成规则可以总结为:当日期相等时,加 1;当日期不相等时,重新赋值日期,流水号从 1 开始。 并发测试 并发测试是该解决方案的最后...

    流水号生成(不通过数据库)

    可以生成各种类型的不会重复的流水号,支持批量生成流水号,支持生成各个类型的流水号且互不冲突,例如给每个业务生成互不影响的流水号。 生成的流水号支持各种格式和长度,例如TB201708100001,AAS2017080001,SDB...

    流水号生成软件

    更复杂的流水号可能包括业务系统的标识符、随机数或者自增序列。 流水号生成软件的设计通常基于以下几点: 1. **唯一性**:这是流水号生成的最基本要求,确保每一个流水号在整个系统中都是唯一的,不会重复。这...

    java生成流水-格式202001270001

    在Java编程中,生成流水号是一项常见的需求,特别是在金融、电商等系统中,流水号作为交易的唯一标识,对于数据的追踪和管理至关重要。在这个场景中,“java生成流水-格式202001270001”指的是一个Java程序,用于...

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

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

    SQLserver中按年月日生成日期型自增编码.pdf

    SQL Server 中按年月日生成日期型自增编码 本文档介绍了在 SQL Server 中生成日期型自增编码的...* 流水号生成 * 日期型自增编码生成 该方法提供了一种灵活的解决方案,能够满足不同业务需求的日期型自增编码需求。

    .NET 流水号的生成源代码(附:数据库)

    - **扩展性**:随着业务的增长,可能需要支持多业务线或分区域的流水号生成,这时可以设计更复杂的流水号结构,如前缀+自增序列。 - **性能优化**:在高并发环境下,应确保流水号生成不会成为性能瓶颈,可能需要使用...

    生成相同长度的流水号

    在IT行业中,生成相同长度的流水号是一项常见的需求,特别是在数据库操作、订单处理或系统标识等领域。在C#编程语言中,我们可以利用多种方法来实现这一功能。下面将详细介绍如何在C#中生成相同长度的流水号,并提供...

    NET 流水号的生成源代码(附数据库)

    通常,流水号可以是自增的整数,每次插入新记录时自动递增。在SQL数据库中,可以通过创建一个带有`IDENTITY`属性的字段来实现这一功能。例如: ```sql CREATE TABLE MyTable ( Id INT IDENTITY(1,1) PRIMARY KEY, ...

    NET 如何进行流水号的生成的案例及源代码(附数据库)

    一种常见的方法是基于时间戳和自增序列结合,确保每次生成的流水号都是唯一的。例如,我们可以使用当前时间的毫秒数加上一个自增序列,通过一定的格式化处理,形成易于识别的流水号。在C#中,可以利用`DateTime.Now....

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

    这种方法能够生成连续的流水号编码,但可能会在多用户同时操作时产生冲突。为了避免这种冲突,可以在保存之前进行检查或使用其他机制确保唯一性。 ### SQL存储过程应用 存储过程`PWMS_GetMaxNo`的具体实现未在代码...

    mybatis+mysql 使用存储过程生成流水号的实现代码

    在IT行业中,数据库管理和数据处理是至关重要的环节。在MySQL数据库中,存储过程是一种预编译的...这种方案适用于需要自增且有一定规则的流水号场景,如订单号、故障编号等,有效地解决了多用户并发访问时的冲突问题。

    mysql 流水号 存储过程 附表结构

    流水号通常用于为数据库中的记录生成唯一的标识,它们可以是自增主键,也可以是带有特定前缀、后缀和日期元素的字符串。在事务处理中获取流水号尤其重要,因为这确保了在并发环境下也能保持流水号的唯一性和正确性。...

    自动增长列的编号生成

    ### 自动增长列的编号生成方法 在数据库应用开发中,自动增长列的编号生成是一项非常实用的技术。它能够有效地减少应用程序与数据库之间的交互次数,从而提高系统的整体性能。本文将详细探讨一种实现自动增长列编号...

    集群环境流水号设计

    4. **数据库自增ID**:利用数据库的自增特性,每个节点连接不同的数据库实例,这样每个节点都能生成唯一的流水号。但这依赖于数据库,扩展性较差。 5. **分布式ID服务,如Twitter的Bottleneck、Facebook的Voldemort...

    一个实用的流水号编码类

    在实际开发中,流水号的生成可以基于时间戳、数据库自增字段或者分布式ID生成器。 序列号(Serial Number)则更侧重于安全性与防伪,它通常由一系列特定算法计算得出,可能包含版本信息、产品ID、发行日期等,用于...

    sql server 2000 分页存储过程,DB2分页存储过程,db2自动生成流水号存储过程

    下面将详细介绍SQL Server 2000和DB2中分页存储过程的实现,以及DB2如何自动生成流水号。 首先,让我们看看SQL Server 2000的分页存储过程。在SQL Server 2000中,由于没有内置的OFFSET和FETCH NEXT功能,我们通常...

Global site tag (gtag.js) - Google Analytics