MySQL 按日期流水号 条码 分布式流水号

这篇具有很好参考价值的文章主要介绍了MySQL 按日期流水号 条码 分布式流水号。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

有这样一个场景,有多台终端,要获取唯一的流水号,流水号格式是 日期+0001形式,使用MySQL的存储过程+全局锁实现这个需求。
以下是代码示例。

注:所有的终端连接到MySQL服务器获取流水号,如果获取到的是 “-1”,需要重新获取。

CREATE DEFINER = 'root'@'%'
PROCEDURE GetCurrentDateNumber()
BEGIN
    set @lock_string='order_num_lock';
    #5代表获取锁时等待5秒
    SELECT GET_LOCK(@lock_string,5) INTO  @order_num_lock;
    set @TodayString=DATE_FORMAT(CURDATE(),'%Y%m%d');
    IF @order_num_lock=1 THEN
       SELECT COUNT(*) INTO @TodayCount
       FROM OrderInfo WHERE LEFT(OrderNum,8)=@TodayString;
       IF @TodayCount=0 THEN
          set @SerialNum=CONCAT(@TodayString,'0001');
          INSERT INTO OrderInfo (OrderNum) VALUE (@SerialNum);
          select @SerialNum SerialNum;
       ELSE
          SELECT MAX(OrderNum) INTO @MaxOrderNum
          FROM OrderInfo WHERE LEFT(OrderNum,8)=@TodayString;

          set @SerialNumInt=cast(RIGHT(@MaxOrderNum,4) AS SIGNED)+1;
          SET @SerialNum=CONCAT(@TodayString,RIGHT(CONCAT('0000',CAST(@SerialNumInt AS char)),4));
          INSERT INTO OrderInfo (OrderNum) VALUE (@SerialNum);
          select @SerialNum SerialNum;
       END IF;
       select RELEASE_LOCK(@lock_string) INTO @RELEASE_LOCK;
    ELSE
       SELECT '-1' SerialNum; #拿不到锁时,返回-1
    END IF;
    
END

MySQL 按日期流水号 条码 分布式流水号,mysql,分布式,数据库
MySQL 按日期流水号 条码 分布式流水号,mysql,分布式,数据库文章来源地址https://www.toymoban.com/news/detail-783596.html

到了这里,关于MySQL 按日期流水号 条码 分布式流水号的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分布式锁实现(mysql,以及redis)以及分布式的概念

    我旁边的一位老哥跟我说,你知道分布式是是用来干什么的嘛?一句话给我干懵了,我能隐含知道,大概是用来做分压处理的,并增加系统稳定性的。但是具体如何,我却道不出个1,2,3。现在就将这些做一个详细的总结。至少以后碰到面试官可以说上个123。 那么就正式进入

    2024年01月21日
    浏览(61)
  • MySQL做分布式锁

    分布式锁mysql实现方式 方式1:唯一索引 创建锁表,内部存在字段表示资源名及资源描述,同一资源名使用数据库唯一性限制。 多个进程同时往数据库锁表中写入对某个资源的占有记录,当某个进程成功写入时则表示其获取锁成功 其他进程由于资源字段唯一性限制插入失败陷

    2024年02月14日
    浏览(35)
  • Mysql 分布式序列算法

    接上文 Mysql分库分表 在分布式系统下,怎么保证ID的生成满足以上需求? ShardingJDBC支持以上两种算法自动生成ID。这里,使用ShardingJDBC让主键ID以雪花算法进行生成,首先配置数据库,因为默认的注解id是int类型,装不下64位,需要进行修改: 然后修改mybatis的插入语句,因为

    2024年02月07日
    浏览(40)
  • 分布式锁之mysql实现

    5000个请求测试买票,查看是否出现超卖问题 出现了超卖问题 或者使用ReentrantLock jmeter压测结果显示,5000总票数,压测5000,都能够解决超卖的现象   查库操作,演示超卖现象 5000总票数,压测5000,压测结果,显示超卖  加锁,本地锁解决超卖现象 5000总票数,压测5000,压测

    2024年02月11日
    浏览(36)
  • 只用Mysql搞一个分布式锁

    在web开发中,分布式的锁的应用场景甚多,我们可以通过分布式锁来进行一些仅依赖于数据库的事务很难直接保证原子性的操作,比如多种不同数据源的访问,网络通信等等。多数情况下我们会使用memcache的add, redis中在set中指定nx参数等来完成。 下面介绍一个仅依赖Mysql来完

    2024年01月22日
    浏览(45)
  • 如何使用mysql实现分布式锁

    目录 什么是分布式锁? 如何实现分布式锁? 定义分布式表结构 定义锁统一接口 使用mysql来实现分布式锁 ① 生成线程标记ID ② 加锁 ③ 解锁 ④ 重置锁 写在最后 1. 什么是分布式锁? 百度百科:分布式锁是控制分布式系统之间同步访问共享资源的一种方式。 ㅤ如引用所述,

    2024年02月05日
    浏览(41)
  • 分布式锁实现(mysql,以及redis)以及分布式的概念(续)redsync包使用

    这张尽量结合上一章进行使用:上一章 这章主要是讲如何通过 redis 实现分布式锁的 这里我用 redis 去实现: 技术: golang , redis , 数据结构 这里是有一个大体的实现思路:主要是使用 redis 中这些语法 redis 命令说明: setnx 命令: set if not exists ,当且仅当 key 不存在时,将 ke

    2024年01月22日
    浏览(64)
  • 分别使用Redis、MySQL、ZooKeeper构建分布式锁

    本文使用Java构建三种中间件的分布式锁,下面介绍下三种分布式锁的优缺点, 使用MySQL构建分布式锁 ,因为数据库数据存储在磁盘中,所以IO速率相对较慢,因此构建出来的分布式锁不适合用在高并发场景,对于一些对并发要求不高的系统中可以使用,进一步提高系统的安全

    2024年02月06日
    浏览(46)
  • ​【五一创作】基于mysql关系型实现分布式锁

    看完该文预计用时:15分钟 看之前应具体的技术栈:springboot mysql nginx(了解即可) 目录 0.写在前面 1. 从减库存聊起 1.1. 环境准备   1.2. 简单实现减库存  1.3. 演示超卖现象 1.4. jvm锁问题演示  1.4.2. 原理 1.5. 多服务问题  1.5.1. 安装配置nginx 1.5.2. 压力测试  1.6. mysql锁演示 1

    2024年02月05日
    浏览(44)
  • 分布式数据库·Hive和MySQL的安装与配置

    一、版本要求:Hadoop:hadoop-2.10.1、MySQL:mysql-8.0.35、 HIVE :apache-hive-3.1.2、MySQL驱动:mysql-connector-java-5.1.49 安装包网盘链接:阿里云盘分享 安装位置  Hive:master、MySQL:slave1 二、卸载已安装的MySQL(如果不符合需求) 1.关闭MySQL服务 2.Yum检查 3.安装则直接删除 4.rpm检查 5.如果存在则删

    2024年02月03日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包