为什么 要弄清楚 mysql int(5) int(11) bigint 自建mysql主键id python random 科学计数法
场景:
有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 科学计数法的更多相关文章
- mysql insert一条记录后 返回创建记录主键id的方法
mysql插入数据后返回自增ID的方法 mysql和oracle插入的时候有一个很大的区别是,oracle支持序列做id,mysql本身有一个列可以做自增长字段,mysql在插入一条数据后,如何能获得 ...
- MyBatis+MySQL 返回插入的主键ID
需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值. 方法:在mapper中指定keyProperty属性,示例如下: <insert id="i ...
- mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法
[CSDN下载] Powerdesigner 设计主键code不能重复等问题 [CSDN博客] Oracle中用一个序列给两个表创建主键自增功能的后果 [CSDN博客] MySQL自增主键删除后重复问 ...
- MySQL ORDER BY主键id加LIMIT限制走错索引
背景及现象 report_product_sales_data表数据量2800万: 经测试,在当前数据量情况下,order by主键id,limit最大到49的时候可以用到索引report_produ ...
- (转)MyBatis+MySQL 返回插入的主键ID
MyBatis+MySQL 返回插入的主键ID 需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值. 方法:在mapper中指定keyProperty属性,示例如 ...
- mybatis与mysql插入时返回主键id的值
<insert id="insertCharge" parameterType="com.bb.bean.Rechargerecord"> < ...
- 为mysql 表重新设置自增的主键id
1,删除原有主键: ALTER TABLE `table_name` DROP `id`; 2,添加新主键字段: ALTER TABLE `table_name` ADD `id` INT NOT N ...
- Mybatis 中获取添加的自增主键ID(针对mysql)
分享一篇博客,主要就是针对在我们使用SSM的时候,在.xml中获取<insert></insert> 时的自增主键Id,由于好久没有,这个时候使用,有点生疏,就在这里写个笔记, ...
- Mysql对自增主键ID进行重新排序
Mysql数据库表的自增主键ID号经过一段时间的添加与删除之后乱了,需要重新排列. 原理:删除原有的自增ID,重新建立新的自增ID. 1,删除原有主键: ALTER TABLE `table_name ...
随机推荐
- JavaScript 学习笔记(三)
本章学习内容: 1.数组的使用 2.类和对象细节. 3.this关键字的使用 4.构造函数,成员函数的使用 1.数组的使用 在任何的语言中,必须要有的就是数组了,有了数组,使得很多操作都变得非常的 ...
- nodejs基础 -- 函数
Node.js 函数 在JavaScript中,一个函数可以作为另一个函数接收一个参数.我们可以先定义一个函数,然后传递,也可以在传递参数的地方直接定义函数. Node.js中函数的使用与Javasc ...
- Uniprot 数据库-最常用的蛋白质数据库
Uniprot 数据库是收录信息最全面的蛋白质数据库,包含swissport, uniparc, TrEMBL 3个子数据库: 其中swiss-prot 是手工核对过的 ,非冗余, 有详细注释信息的蛋 ...
- Sqrt算法
转自原文:http://www.cnblogs.com/pkuoliver/archive/2010/10/06/sotry-about-sqrt.html 一个Sqrt函数引发的血案 2010-10 ...
- C# 基础小知识之yield 关键字
对于yield关键字我们首先看一下msdn的解释: 如果你在语句中使用 yield 关键字,则意味着它在其中出现的方法.运算符或 get 访问器是迭代器. 通过使用 yield 定义迭代器,可在实现自 ...
- win7 自带计算机(for programmer)
打开win7的Accessories, 看到Calculator, 点击打开计算器. 可以看到32位的2进制代码:
- UI设计要学哪些软件
准备做UI设计的或是已经在做UI设计的童鞋,哪些软件是我们要学习的重点,作者把UI设计分成了好几个不同的职业方向,从事什么UI设计方向,就学什么软件,这样针对性就很强了,无论怎么说,Photoshop ...
- swift - 之 UICollectionView的用法/自定义流布局
具体代码如下: 1.声明 var hCollectionView:UICollectionView? var layout:UICollectionViewFlowLayout? let course ...
- DOCKER在windows上安装与配置
1.下载程序 安装包 https://github.com/boot2docker/windows-installer/releases(这个地址国内下载很慢) 用这个: https://get.da ...
- Unity导入FBX自动进行动画切分
手动处理动画分割 在导入FBX模型过程中,若带有动画呢,需要对它进行切分. 当然这个工作可以在Unity中完成. 比如: 这样手动来分割进行. 自动动画切分 这就需要代码了. 把代码保存成cs文件 ...