生成自增流水号
程序员文章站
2022-04-04 19:42:55
...
流水号自增规则:时间(天) + 自增流水(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
如果担心数据库的并发处理会出问题,可以将这个字段设置成唯一,前台做良好的错误提示或自动提交。
以上只是个人浅见,欢迎大家指教讨论~
推荐阅读
-
oracle 实现自增auto_increament 博客分类: Oracle小记 oracle自加auto_increament
-
Python+MongoDB自增键值的简单实现
-
小议主子表INT自增主键插入记录的方法_MySQL
-
自动生成程序,免去增,删,改,查的数据库编程 ( 定义游标,逐
-
Oracle创建自增字段--ORACLE SEQUENCE的简单使用介绍
-
php实现Mongodb自定义方式生成自增ID的方法_PHP
-
sql:数据表的主键是varchar类型,不会自增,插入数据时怎么插入主键
-
SQL Server自增字段归零_MySQL
-
相关于thinkphp文本字段自增
-
创建mysql数据表的时候没有设置自增,后面如何设置成自增