场景:

有1.2亿条问答数据,相同问题的不同答案为不同条的数据,且该表数据逐日递增;

第三方需求(不合理):

将问题、答案数据分别放入问题表、答案表;

问题表的主键为整数,在答案表中,每行数据有相应的问题表的主键值;

为加快写入速度,不去问题表查找主键id,而在写库前,由脚本生成问题表的主键id,分别写入问题表、答案表;

生成算法:

11位时间戳+4位随机数

注意:时间戳至少11位;(千年代码)

mktime2date(1543400352) #2018-11-28 18:19:12
mktime2date(2543400352)
mktime2date(11543400352)

2018-11-28 18:19:12
2050-08-06 20:05:52
2335-10-19 12:05:52

取19位

while True:
s = str(time.time()).replace('.', '')[0:11] + str(random.random()).replace('0.', '')[0:8]
print(len(s), ':', s)
sql = 'INSERT INTO testtab (id,v) VALUES ({},{});'.format(s, s)
mysql_write(sql, mysql_key=mysql_key) bigint 2**32 /2 最多20位 实际越限制,取19位

CREATE TABLE `testtab` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`v` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9223372036854775807 DEFAULT CHARSET=utf8;

id v
1543481843334780969 1543481843334780969
1543481843635608877 1543481843635608877
1543481843922917607 1543481843922917607
1543481844262030440 1543481844262030440
1543481844454898236 1543481844454898236
1543481844753212767 1543481844753212767
1543481845071223819 1543481845071223819
1543481845310268788 1543481845310268788
1543481845574891236 1543481845574891236
1543481845801856854 1543481845801856854
1543481846122573779 1543481846122573779
1543481846437020403 1543481846437020403
1543481846688148132 1543481846688148132
1543481846961211022 1543481846961211022
1543481847216052080 1543481847216052080
1543481847589641016 1543481847589641016
1543481847709827395 1543481847709827395
1543481848042075766 1543481848042075766
1543481848361608572 1543481848361608572
1543481848613226664 1543481848613226664
1543481848829092584 1543481848829092584
1543481849104387422 1543481849104387422

def gen_mysql_pk_bigint():
s = str(time.time()).replace('.', '')[0:11] + str(random.random()).replace('0.', '')[0:8]
if len(s) < 19:
s = '{}{}'.format(s, ''.join(['9' for i in range(8)]))[0:19]
return s C:\Users\sas\.PyCharm2017.2\system\python_stubs\-1603771140\_random.py
def random(self): # real signature unknown; restored from __doc__
""" random() -> x in the interval [0, 1). """
pass
import time, random

def gen_mysql_pk_bigint():
# int(time.time())
# 13=11+2
s0=random.random()
s1, s2 = str(time.time()).replace('.', '')[0:13], str(s0).replace('0.', '')[0:6]
s = s1 + s2
# 19-11=8 if len(s) < 19:
s = '{}{}'.format(s, ''.join(['9' for i in range(8)]))[0:19]
if '.' in s:
print('s0',s0)
print('s',s)
print(s1)
print(s2)
return s while True:
gen_mysql_pk_bigint() s0 4.542730178391796e-05
s 15435447395814.5427
1543544739581
4.5427
s0 3.257238433707066e-05
s 15435447395993.2572
1543544739599
3.2572
s0 4.646998949264791e-05
s 15435447396164.6469
1543544739616
4.6469
s0 2.2152567914712762e-05
s 15435447396202.2152
1543544739620
2.2152
s0 1.5478322555884105e-05
s 15435447396271.5478
1543544739627
1.5478

  



												

为什么 要弄清楚 mysql int(5) int(11) bigint 自建mysql主键id python random 科学计数法的更多相关文章

  1. mysql insert一条记录后 返回创建记录主键id的方法

    mysql插入数据后返回自增ID的方法 mysql和oracle插入的时候有一个很大的区别是,oracle支持序列做id,mysql本身有一个列可以做自增长字段,mysql在插入一条数据后,如何能获得 ...

  2. MyBatis+MySQL 返回插入的主键ID

    需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值. 方法:在mapper中指定keyProperty属性,示例如下: <insert id="i ...

  3. mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法

    [CSDN下载] Powerdesigner 设计主键code不能重复等问题 [CSDN博客] Oracle中用一个序列给两个表创建主键自增功能的后果 [CSDN博客] MySQL自增主键删除后重复问 ...

  4. MySQL ORDER BY主键id加LIMIT限制走错索引

    背景及现象 report_product_sales_data表数据量2800万: 经测试,在当前数据量情况下,order by主键id,limit最大到49的时候可以用到索引report_produ ...

  5. (转)MyBatis+MySQL 返回插入的主键ID

    MyBatis+MySQL 返回插入的主键ID 需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值. 方法:在mapper中指定keyProperty属性,示例如 ...

  6. mybatis与mysql插入时返回主键id的值

    <insert id="insertCharge" parameterType="com.bb.bean.Rechargerecord"> < ...

  7. 为mysql 表重新设置自增的主键id

    1,删除原有主键: ALTER TABLE `table_name` DROP `id`; 2,添加新主键字段: ALTER TABLE `table_name` ADD `id` INT NOT N ...

  8. Mybatis 中获取添加的自增主键ID(针对mysql)

    分享一篇博客,主要就是针对在我们使用SSM的时候,在.xml中获取<insert></insert> 时的自增主键Id,由于好久没有,这个时候使用,有点生疏,就在这里写个笔记, ...

  9. Mysql对自增主键ID进行重新排序

    Mysql数据库表的自增主键ID号经过一段时间的添加与删除之后乱了,需要重新排列. 原理:删除原有的自增ID,重新建立新的自增ID. 1,删除原有主键: ALTER TABLE `table_name ...

随机推荐

  1. (转)platform_driver_register,什么时候调用PROBE函数 注册后如何找到驱动匹配的设备

     platform_driver_register,什么时候调用PROBE函数 注册后如何找到驱动匹配的设备 2011-10-24 19:47:07 分类: LINUX   kernel_init中d ...

  2. (记录)eclipse常用设置步骤

    代码风格文件导入: https://blog.csdn.net/wangming520liwei/article/details/53911736 注释中的author修改: https://jing ...

  3. select自定义小三角样式

    这段代码是网上大部分的解决办法,在这里总结一下: 让select透明,上面加一个span,来替换select框,可以自定义小三角样式,也可以做出select文字居中的效果. <div class ...

  4. mysql中什么是物理备份?

    需求描述: 今天在看数据库备份,恢复的内容,就是对于一个概念,物理备份的理解,在这里记录下. 概念解释: 物理备份:就是对存储数据库内容的目录和文件的直接拷贝.简单来说,就是对物理文件的拷贝. 文档创 ...

  5. c# JsonHelper类

    using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...

  6. Oracle中的三种循环(For、While、Loop)

    from:http://jingyan.baidu.com/article/c275f6ba38036ae33c756773.html GOTO用法,以下是SQL源码: DECLARE  x numb ...

  7. ionic调用数据接口(post、解决 payload 问题)

    $http({method:'POST', url:apiUrl, headers:{'Content-Type': 'application/x-www-form-urlencoded; chars ...

  8. 如何快速入门单片机C语言

    一.为什么要学单片机技术? 传统的电子产品升级改造成智能化的电子产品需要用到单片机技术.也就是说传统的电子产品如电视机.电子表.计算器.数码相机.手机.MP3.遥控器.洗衣机等产品智能化.微型化,需要 ...

  9. 新唐ARM9之NUC972学习历程之系统的搭建和BSP包的使用

    说到嵌入式,我们首先想到的,就是它的复杂程度,LINUX,BSP,UBOOT,交叉编译,寄存器配置,等等一系列的问题,甚至有的时候我们对此一头雾水,很是头疼,不过我们今天要说的就是关于NUC972的一 ...

  10. C++模板实战6:迭代器

    1 迭代器的类型: 输入迭代器 .前向迭代器.双向迭代器.跳转迭代器以及输出迭代器.这五种迭代器的限制条件从左至右越来越强. 2 输入迭代器需满足的条件: X u(a); X可复制构造 u=a; 可赋 ...