MySQL编程实战三之求任务执行批次号
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编程实战三之求任务执行批次号相关推荐
- Mysql 编程实战三之计算两个日期的工作日数
Mysql 编程实战三之计算两个日期的工作日数 1.需求 求出两个日期中的工作日数. 2.实现 代码如下: delimiter // drop procedure if exists getworkd ...
- Java并发编程实战————Executor框架与任务执行
引言 本篇博客介绍通过"执行任务"的机制来设计应用程序时需要掌握的一些知识.所有的内容均提炼自<Java并发编程实战>中第六章的内容. 大多数并发应用程序都是围绕&qu ...
- !!!. 数据库的编程(ADO) --- 三种sql语句执行的不同
Description: 一. 数据库的编程(ADO) 要用ADO连接数据的头文件中加入 #import "c:\Program Files\Common Files\Sy ...
- python海伦公式求三角形面积_python编程实战:海伦公式求取三角形的面积
之前小编向大家介绍了在python中求取三角形面积的方法:三角形面积代码.大家对三角形面积的求取有了一定的了解,我们也知道计算机可以进行高精度的计算,那如果说在测量土地的面积的时候,不测三角形的高,只 ...
- 小白C语言编程实战(19):质因数分解
这是<小白C语言编程实战>系列的第19篇. 上一篇:小白C语言编程实战(18):求5位整数中,回文数的个数 文章目录 题目 要求 提示 参考代码 题目 对区间[90, 100]中的所有整数 ...
- Linux shell 脚本编程-实战篇(三)
继: Linux shell 脚本编程-实战篇(二) 3. 一些小有意思的脚本 3.1 发送消息 3.1.1 功能分析 对于这种简单的脚本,需要的功能不多.涉及的一些命令很常见,下面了解脚本所需的几个 ...
- JAVA并发编程实战-任务执行
目录 思维导图 1 在线程中执行任务 1.1 顺序执行任务 1.2 显式的为任务创建线程 1.3 无限制创建线程的缺点 2 Executor框架 2.1 使用Executor实现WebServer 2 ...
- 使用C语言调用mysql数据库编程实战以及技巧
今天编写使用C语言调用mysql数据库编程实战以及技巧,为其他IT同行作为参考,当然有错误可以留言,共同学习. 一.mysql数据库的C语言常用接口API 1.首先当然是链接数据库mysql_real ...
- java 高并发第三阶段实战_JAVA多线程编程实战视频-第三阶段(共80节)
高并发编程第三阶段01讲 AtomicInteger多线程下测试讲解 高并发编程第三阶段02讲 AtomicInteger API详解,以及CAS算法详细介绍 高并发编程第三阶段03讲 利用CAS构造 ...
最新文章
- 介绍4种HTML5 Canvas库
- php admin允许空密码登陆
- oracle 11g安装时提示environment variable:PATH 失败
- 推荐系统中使用ctr排序的f(x)的设计-传统模型篇
- android页面布局 如何让中间的listview填充剩余部分_谷歌驾驶设计—界面设计布局...
- 豆瓣9.6分!再一次被BBC的纪录片震惊!
- 二十八、PHP框架Laravel学习笔记——模型的关联查询
- LeetCode 1785. 构成特定和需要添加的最少元素(贪心)
- 求csdn博客优良编辑方法
- 何晓飞首次披露飞步自动驾驶方案:无人货运起步,自研AI芯片
- linux中变量的使用
- linux 下常用操作命令
- 图像从程序到GPU再到LCD显示的流程:GPU渲染管线(五)
- windows下USB通讯
- html5 video标签嵌入视频
- 通九省,枢纽之地...
- 手把手教你设置Typora的图床-gitee
- java jre、jdk、server jre
- 计算机R5,IT教程:电脑r5和r7是什么意思
- 基于STM32的CAN转USB模块的PCB设计
热门文章
- 不懂代码?没关系,照样可以做SaaS软件开发
- 业务系统如何集成工作流引擎?
- MSP430F5529之捕获模式下的HCSR04超声测距(粗略)
- 2019计算机三级网络技术答案,2019年计算机三级网络技术精选练习题
- SPI读写FLASH 原理+完整代码
- 【学浪下载教程】02学浪下载之Fiddler学浪插件配置
- 模拟卷Leetcode【普通】1109. 航班预订统计
- Spring MVC源码 ----- @RequestBody和@ResponseBody原理解析
- 【一天一个挨打小技巧】大黄蜂云课堂在听课时候做笔记,无法截图!安排
- win7+bugzilla+apache+mysql+activePerl