mysql 生成流水号 存储过程 订单编号

用存储过程生成流水号是很常用的,这里以生成订单编号的流水号作为示例。(新的一天的流水号从1开始,如:今天的订单编号是CD2013 0109 00014 ,下一个订单编号将是 CD 2013 0109 00015 ; 明天的订单编号将从 CD 2013 0110 00001 开始) 生成规则:2位前缀

用存储过程生成流水号是很常用的,这里以生成订单编号的流水号作为示例。(新的一天的流水号从1开始,如:今天的订单编号是cd2013010900014,下一个订单编号将是cd2013010900015;明天的订单编号将从cd2013011000001开始)

生成规则:2位前缀+年月日+5位流水号 或者 2位前缀+年月日时分+5位流水号 或者 2位前缀+年月日时分秒+5位流水号。

测试订单表(test_orders):

CREATE TABLE `test_orders` (    `id` int(11) NOT NULL AUTO_INCREMENT,    `orderNo` varchar(25) NOT NULL DEFAULT '',    `orderName` char(10) NOT NULL DEFAULT '',    PRIMARY KEY (`id`)  ) ENGINE=InnoDB AUTO_INCREMENT=76 DEFAULT CHARSET=utf8

登录后复制

生成订单编号的存储过程(generate_orderNo):

CREATE DEFINER=PROCEDURE `generate_orderNo`(in orderNamePre char(2), in num int, out newOrderNo varchar(25))  BEGIN    DECLARE currentDate varCHAR (15) ;-- 当前日期,有可能包含时分秒     DECLARE maxNo INT DEFAULT 0 ; -- 离现在最近的满足条件的订单编号的流水号最后5位,如:SH2013011000002的maxNo=2   --  DECLARE l_orderNo varCHAR (25) ;-- 新生成的订单编号   --  DECLARE oldDate DATE ;-- 离现在最近的满足条件的订单编号的日期     DECLARE oldOrderNo VARCHAR (25) DEFAULT '' ;-- 离现在最近的满足条件的订单编号         if num = 8 then -- 根据年月日生成订单编号       SELECT DATE_FORMAT(NOW(), '%Y%m%d') INTO currentDate ;-- 订单编号形式:前缀+年月日+流水号,如:SH2013011000002     elseif num = 14 then -- 根据年月日时分秒生成订单编号       SELECT DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') INTO currentDate ; -- 订单编号形式:前缀+年月日时分秒+流水号,如:SH2013011010050700001,个人不推荐使用这种方法生成流水号     else -- 根据年月日时分生成订单编号       SELECT DATE_FORMAT(NOW(), '%Y%m%d%H%i') INTO currentDate ;-- 订单形式:前缀+年月日时分+流水号,如:SH20130110100900005     end if ;        SELECT IFNULL(orderNo, '') INTO oldOrderNo     FROM test_orders     WHERE SUBSTRING(orderNo, 3, num) = currentDate       AND SUBSTRING(orderNo, 1, 2) = orderNamePre       and length(orderNo) = 7 + num    ORDER BY id DESC LIMIT 1 ; -- 有多条时只显示离现在最近的一条         IF oldOrderNo != '' THEN       SET maxNo = CONVERT(SUBSTRING(oldOrderNo, -5), DECIMAL) ;-- SUBSTRING(oldOrderNo, -5):订单编号如果不为‘‘截取订单的最后5位     END IF ;    SELECT       CONCAT(orderNamePre, currentDate,  LPAD((maxNo + 1), 5, '0')) INTO newOrderNo ; -- LPAD((maxNo + 1), 5, '0'):如果不足5位,将用0填充左边         INSERT INTO test_orders (orderNo, orderName) VALUES (newOrderNo, 'testNo') ; -- 向订单表中插入数据   --    set newOrderNo = l_orderNo;     SELECT       newOrderNo ;  END

登录后复制

参数说明:orderNamePre:(输入)订单编号的前缀,这里设定为两个字符
                  num:(输入)将按什么规则生成流水号(生成规则有:年月日、年月日时分秒、年月日时分三种),可选的num有:8、12、14
                  newOrderNo:(输出)新生成的订单编号

生成中的一些说明在存储过程中已经写得很明确了,这里不再重复。

调用存储过程向表中插入数据:

SET @orderNo = '';  CALL `generate_orderNo`('SH', 12, @orderNo);  SELECT @orderNo;

登录后复制

查看生成的数据(我这里调用了很多次,所以生成的数据很多):

mysql 生成流水号 存储过程 订单编号        mysql 生成流水号 存储过程 订单编号

在实际项目中只需要修改其中的一些生成规则即可,到此为止,流水号的生成就搞定了,是不是很简单 mysql 生成流水号 存储过程 订单编号

有关mysql存储过程的知识可以参考我的这篇文章:MySQL存储过程详解

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1668893.html

(0)
上一篇 2025年2月19日 08:21:13
下一篇 2025年2月19日 08:21:28

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 售楼部做的流水一般能过吗

    现在买房贷款最常规的一个流程就是要去银行查看看自己流水够不够,因为贷款申请通过的前提是银行得看你有没有资格还贷款,如果流水达不到的话,一般是不能通过买房贷款的哦! 售楼部做的流水一般能过吗 售楼部做的流水一般不能通过的。因为这种流水不一定就…

    2025年4月20日
    490.2K00
  • 银行贷款方式都对流水有要求吗

    银行贷款方式是对流水有要求的,如果流水不符合的话,一般银行也是不会批贷款的。那么,银行流水不满足贷款的要求怎么办?一起来看看趣丁网带来的详细介绍吧! 银行贷款方式都对流水有要求吗 银行贷款方式并不是都对流水有要求,因为银行贷款方式有很多,有…

    2025年4月17日
    323.0K00
  • 房贷流水没有连续6个月怎么办

    在向银行申请房贷之前,都会进行审批,而工资流水就是贷款最好的证明。那么,房贷流水没有连续6个月怎么办?房贷流水没有体现工资二字可以吗?一起来看看趣丁网带来的详细介绍吧!   房贷流水没有连续6个月怎么办  打算贷款买房,但能提供的银行流水没…

    2025年4月17日
    478.5K00
  • 银行能打10年的流水吗

    银行一般看流水后才会去证明你是否有资质贷款,而银行保存个人流水的日期一般是五年,十年的是没有电子记录的,可能需要去柜台上打印。那么,假银行流水能贷款吗?一起来看看趣丁网带来的详细介绍吧! 银行能打10年的流水吗 按照国家规定,各银行的流水保…

    2025年4月17日
    827.4K00
  • 贷款买房银行流水是个人的消费记录吗

    贷款买房银行流水是看自己每个月的收入,而不是消费记录,如果每个月固定收入到账,那就证明你有能力还款,如果没有的话,那可能不会通过房贷,具体可以看看趣丁网带来的详细介绍。 贷款买房银行流水是个人的消费记录吗 贷款买房银行流水是个人的消费记录。…

    2025年4月17日
    677.2K00
  • Java框架性能优化常见问题解答

    Java 框架性能优化常见问题解答 引言 在高并发和数据吞吐量高的系统中,Java 框架的性能优化至关重要。本文探讨了一些常见的性能优化问题及其对应的解决方案。 1. 数据库连接管理 立即学习“Java免费学习笔记(深入)”; 问题:应用程…

    2025年4月2日
    100
  • Hibernate框架学习笔记:从概念到实战

    hibernate框架简化了java应用程序中与数据库交互的过程,涉及以下概念:实体(pojo表示数据库表)、会话(数据库交互)、查询(检索数据)、映射(类与表关联)、事务(确保数据一致性)。实战案例演示了创建数据库表、实体类、hibern…

    2025年4月2日
    200
  • Java框架中资源利用的性能优化方法有哪些?

    java 框架中优化资源利用性能的方法:采用池技术连接池和线程池管理连接和线程,避免频创建和销毁;缓存常用数据和对象,减少数据库访问和对象创建;异步处理耗时操作,避免卡顿;优化内存使用,选用合适的容器、清理引用、禁用未用类和方法;使用性能监…

    2025年4月2日
    100
  • java怎么导入数据库

    要在 Java 中导入数据库,需要依次执行以下步骤:建立数据库连接。创建 Statement 对象。执行 CREATE 语句创建表。执行 INSERT 语句插入数据。关闭 Statement 和数据库连接。 如何在 Java 中导入数据库 …

    2025年4月2日
    200
  • 哪些开源替代品具有独特的特性和优势?

    postgresql、mongodb、redis 和 mariadb 等开源数据库引擎提供独特的特性和优势:postgresql:可扩展性、安全性、jsonb 支持mongodb:文档结构、分布式架构、云服务redis:内存数据库、键值存储…

    2025年4月2日
    100

发表回复

登录后才能评论