场景:

有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. nodejs基础 -- 事件循环

    Node.js 事件循环 Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高. Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用, ...

  2. 说一下zoom:1的原理,万一被问到呢?

    某一天.前同事低着头从鹅厂面试回来.他说他被一道非经常见的问题难倒了. 对方问他知道zoom:1的作用吗? 前同事:清楚浮动啊,触发haslayout. 再问:那你知道zoom:1的工作原理和来龙去脉 ...

  3. C++primer中 CacheObj实现(非常有意思)

    //CacheObj.h #ifndef __CacheObj__ #define __CacheObj__ #include <iostream> #include <stdexc ...

  4. why pure virtual function has definition 为什么可以在基类中实现纯虚函数

    看了会音频,无意搜到一个frameworks/base/include/utils/Flattenable.h : virtual ~Flattenable() = 0; 所以查了下“纯虚函数定义实现 ...

  5. develop brew app from here

    https://brewx.qualcomm.com/brew/sdk/download.jsp?page=dx/en/brew31/ad/tl/overview the email is silen ...

  6. 【spring教程之中的一个】创建一个最简单的spring样例

    1.首先spring的主要思想,就是依赖注入.简单来说.就是不须要手动new对象,而这些对象由spring容器统一进行管理. 2.样例结构 如上图所看到的,採用的是mavenproject. 2.po ...

  7. laravel 强大的关联模型

    内容比较多,不总结了,直接看学院君的译文吧,已经写得很详细了 传送门:http://laravelacademy.org/post/6191.html PS1: laravel的关联模型并不是遍历一次 ...

  8. ASP代码审计学习笔记-1.SQL注入

    ASP注入漏洞 一.SQL注入的原因 按照参数形式:数字型/字符型/搜索型 1.数字型sql查询 sql注入原因: ID=49 这类注入的参数是数字型,SQL语句原貌大致如下: id=request. ...

  9. Facebook广告目标摘要

    Facebook Ads look slightly different depending on the results you want. This guide includes recommen ...

  10. 详谈redis优化配置和redis.conf

    1. Redis.conf 配置参数: #是否作为守护进程运行 daemonize yes #如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid pidfile redi ...