MySQL编程实战三之求任务执行批次号

需求:

想产生一个与时间有关的process_id;需要考虑到批次号的不冲突性。例如有很多任务同时执行,这个同时很有可能是在同一毫秒上,所以我们最好使用一个随机数来完成这个需求。

实现一:

select floor(date_format(sysdate(3),'%Y%m%d%H%i%s%f')/1000) + floor(1000 * rand()) as process_id;
这个实现是有问题的,问题出现在加法上,一个time1+rand1很有可能是与time2+rand2相等的。所以不能用加法实现唯一性。取而代之的是拼接。

实现二:

这里采用扩位的方式,即把结果扩大1000倍,在后三位上加上随机数。但是这样的操作会因为bigint的位数不够而”隐式报错”
select floor(date_format(sysdate(3),'%Y%m%d%H%i%s%f')/1000)*1000 + floor(100 * rand()) as process_id;

mysql> select  floor(date_format(sysdate(3),'%Y%m%d%H%i%s%f')/1000)*1000 + floor(100 * rand()) as process_id;
+----------------------+
| process_id                |
+----------------------+
| 20180725172236820000 |
+----------------------+
1 row in set (0.00 sec)

实现三:

最后的实现方式是:select floor(date_format(sysdate(3),'%y%m%d%H%i%s%f')/1000) * 1000 + floor(100 * rand());
可以用xshell同时执行命令测试一下:

mysql> select floor(date_format(sysdate(3),'%y%m%d%H%i%s%f')/1000) * 1000 + floor(100 * rand()) as process_id;
+--------------------+
| process_id              |
+--------------------+
| 180725172859527100 |
+--------------------+
1 row in set (0.00 sec)
mysql> select floor(date_format(sysdate(3),'%y%m%d%H%i%s%f')/1000) * 1000 + floor(100 * rand()) as process_id;
+--------------------+
| process_id              |
+--------------------+
| 180725172859517060 |
+--------------------+
1 row in set (0.00 sec)

可以发现几乎不会雷同。而且大概率情况下还有一个0作为千位。这样的话,可以进一步修改执行命令:select floor(date_format(sysdate(3),'%y%m%d%H%i%s%f')/1000) * 1000 + floor(1000 * rand()) as process_id;

MySQL编程实战三之求任务执行批次号相关推荐

  1. Mysql 编程实战三之计算两个日期的工作日数

    Mysql 编程实战三之计算两个日期的工作日数 1.需求 求出两个日期中的工作日数. 2.实现 代码如下: delimiter // drop procedure if exists getworkd ...

  2. Java并发编程实战————Executor框架与任务执行

    引言 本篇博客介绍通过"执行任务"的机制来设计应用程序时需要掌握的一些知识.所有的内容均提炼自<Java并发编程实战>中第六章的内容. 大多数并发应用程序都是围绕&qu ...

  3. !!!. 数据库的编程(ADO) --- 三种sql语句执行的不同

    Description: 一. 数据库的编程(ADO)       要用ADO连接数据的头文件中加入    #import "c:\Program Files\Common Files\Sy ...

  4. python海伦公式求三角形面积_python编程实战:海伦公式求取三角形的面积

    之前小编向大家介绍了在python中求取三角形面积的方法:三角形面积代码.大家对三角形面积的求取有了一定的了解,我们也知道计算机可以进行高精度的计算,那如果说在测量土地的面积的时候,不测三角形的高,只 ...

  5. 小白C语言编程实战(19):质因数分解

    这是<小白C语言编程实战>系列的第19篇. 上一篇:小白C语言编程实战(18):求5位整数中,回文数的个数 文章目录 题目 要求 提示 参考代码 题目 对区间[90, 100]中的所有整数 ...

  6. Linux shell 脚本编程-实战篇(三)

    继: Linux shell 脚本编程-实战篇(二) 3. 一些小有意思的脚本 3.1 发送消息 3.1.1 功能分析 对于这种简单的脚本,需要的功能不多.涉及的一些命令很常见,下面了解脚本所需的几个 ...

  7. JAVA并发编程实战-任务执行

    目录 思维导图 1 在线程中执行任务 1.1 顺序执行任务 1.2 显式的为任务创建线程 1.3 无限制创建线程的缺点 2 Executor框架 2.1 使用Executor实现WebServer 2 ...

  8. 使用C语言调用mysql数据库编程实战以及技巧

    今天编写使用C语言调用mysql数据库编程实战以及技巧,为其他IT同行作为参考,当然有错误可以留言,共同学习. 一.mysql数据库的C语言常用接口API 1.首先当然是链接数据库mysql_real ...

  9. java 高并发第三阶段实战_JAVA多线程编程实战视频-第三阶段(共80节)

    高并发编程第三阶段01讲 AtomicInteger多线程下测试讲解 高并发编程第三阶段02讲 AtomicInteger API详解,以及CAS算法详细介绍 高并发编程第三阶段03讲 利用CAS构造 ...

最新文章

  1. 介绍4种HTML5 Canvas库
  2. php admin允许空密码登陆
  3. oracle 11g安装时提示environment variable:PATH 失败
  4. 推荐系统中使用ctr排序的f(x)的设计-传统模型篇
  5. android页面布局 如何让中间的listview填充剩余部分_谷歌驾驶设计—界面设计布局...
  6. 豆瓣9.6分!再一次被BBC的纪录片震惊!
  7. 二十八、PHP框架Laravel学习笔记——模型的关联查询
  8. LeetCode 1785. 构成特定和需要添加的最少元素(贪心)
  9. 求csdn博客优良编辑方法
  10. 何晓飞首次披露飞步自动驾驶方案:无人货运起步,自研AI芯片
  11. linux中变量的使用
  12. linux 下常用操作命令
  13. 图像从程序到GPU再到LCD显示的流程:GPU渲染管线(五)
  14. windows下USB通讯
  15. html5 video标签嵌入视频
  16. 通九省,枢纽之地...
  17. 手把手教你设置Typora的图床-gitee
  18. java jre、jdk、server jre
  19. 计算机R5,IT教程:电脑r5和r7是什么意思
  20. 基于STM32的CAN转USB模块的PCB设计

热门文章

  1. 不懂代码?没关系,照样可以做SaaS软件开发
  2. 业务系统如何集成工作流引擎?
  3. MSP430F5529之捕获模式下的HCSR04超声测距(粗略)
  4. 2019计算机三级网络技术答案,2019年计算机三级网络技术精选练习题
  5. SPI读写FLASH 原理+完整代码
  6. 【学浪下载教程】02学浪下载之Fiddler学浪插件配置
  7. 模拟卷Leetcode【普通】1109. 航班预订统计
  8. Spring MVC源码 ----- @RequestBody和@ResponseBody原理解析
  9. 【一天一个挨打小技巧】大黄蜂云课堂在听课时候做笔记,无法截图!安排
  10. win7+bugzilla+apache+mysql+activePerl