生成自增流水号_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 生成自增流水号

生成自增流水号

 2015/1/9 15:47:23  snkcxy  程序员俱乐部  我要评论(0)
  • 摘要:流水号自增规则:时间(天)+自增流水(000)例如:20150109001,20150109016,20150110001思路一:思路:java通过static和synchronized来实现问题:如果是单纯的一个静态变量,那么如果服务器意外重启,这个变量会从0开始。解决:如果是0的话去持久化介质中验证是否这天从0开始总结:java内存方式固然性能好,实现简单,但是毕竟不是从实际持久化取值,会有数据不同步的情况。思路二:思路:通过sql实现,把并发问题交给数据库处理mysql
  • 标签:

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

例如:20150109001,20150109016,20150110001

?

思路一:

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

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

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

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

?

思路二:

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

?

? ? mysql:

class="sql">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

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

?

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

  • 相关文章
发表评论
用户名: 匿名