流水号自增规则:时间(天) + 自增流水(000)
例如:20150109001,20150109016,20150110001
思路一:
思路:java通过static 和 synchronized来实现
问题:如果是单纯的一个静态变量,那么如果服务器意外重启,这个变量会从0开始。
解决:如果是0的话去持久化介质中验证是否这天从0开始
总结:java 内存方式固然性能好,实现简单,但是毕竟不是从实际持久化取值,会有数据不同步的情况。
思路二:
思路:通过sql实现,把并发问题交给数据库处理
mysql:
- INSERT INTO tmp_order (orderNum) (
- SELECT CONCAT('20150202',liushui) FROM
- (
- SELECT
- CASE
- WHEN orderNum IS NULL THEN '001'
- WHEN RIGHT(MAX(orderNum),3)+1 <10 THEN CONCAT('00',RIGHT(MAX(orderNum),3)+1)
- WHEN RIGHT(MAX(orderNum),3)+1 <100 THEN CONCAT('0',RIGHT(MAX(orderNum),3)+1)
- ELSE RIGHT(MAX(orderNum),3)+1 END liushui FROM tmp_order t
- WHERE t.orderNum LIKE '20150202%'
- ) t1
- )
如果不加日期的纯流水可以考虑使用zerofill
如果担心数据库的并发处理会出问题,可以将这个字段设置成唯一,前台做良好的错误提示或自动提交。
以上只是个人浅见,欢迎大家指教讨论~
相关推荐
自己写的一点小代码,多有不当,请指正! public string GetAutoDocNo() { string DocNo = "AD"; string today = DateTime.Today.Date.ToString("yyyyMMdd", DateTimeFormatInfo.InvariantInfo);...
mysql创建流水号,以前也一直不知道怎么写,最后我知道了,然后我保存了下来,用的纯sql语句,不需要后台java或者别的语言去生成。直接数据库的sql语句就行了。我设置的积分是1分。要是增加了,就是CSDN增加的,
JAVA生成订单号(日期+流水号) java按日期加流水号方式生成订单号,已经测试过,可递增方式生成。
1、每天都会生成初始值1,且递增的流水号 2、不存在多线程问题
自动增长列的编号生成,减少连数据库的次数,非常的实用
SQL,C#,不重复编码,订单号 1. C#后台封装方法 通用获取最大单据编号, 可以生成以下3个类型的单号 CG1603-000001 CG201603-000001 CG20160321-000001
生成以日期开头,加4位数字,每次加1的工具类.如:201712140001,201712140002,201712140003
这是自动生成不重复主键的代码包,直接导包进入程序即可使用,帮助生成由字母数字组成的16位id号,可以用于数据库主键存储(使用数据库自增主键始终有问题,不适合大型程序的使用),该代码包运用于很多大型企业级...
自己参考网上下载的EXCEL资源制作的BOM物料编码自动生成,可以自己修改成适合自己公司的类型,增减BOM编码组成部分等等操作,表格能根据相同类别产品出现的次数流水号自增
在网上搜了半天,都没有看到满意的程序。只好参照别人写的例子,自己写了。编号是按照年份和月份+三位序号自动生成的,用的是SQL server数据库,用VS2010编写的。调试已通过。希望给同为新手的各位一个参考。
依据日期+流水号生成订单号 日期(YYYYMMDD)+流水自增(00001)
值为AUTOSEQ表示参数为自动自增流水号。 参数为日期时间支持初始化值为NOW,即参数的INIT=”NOW”,实时获取时间。 软件应用 一:信息化应用 如:家庭财务管理,电话簿,个人数据的录入,更新,查询等。 二:...
实现日期自动编号的类,在ACCESS下面,实现前缀字符+日期+流水号的自动编号类.
" "t_menuInfo "菜单表 "管理系统菜单 " "t_importTmp "导入数据临时表 "校验银行卡数据 " "t_importHistory"导入数据历史表 "归档导入数据 " "t_billSequenceT"操作流水临时表 "生成流水号 " "mp " " " "t_...