首页 > 其他 > 详细

生成自增流水号

时间:2015-01-10 02:08:52      阅读:392      评论:0      收藏:0      [点我收藏+]

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

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

?

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

生成自增流水号

原文:http://snkcxy.iteye.com/blog/2174391

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!