MySQL中怎么按表创建千万级的压测数据
这期内容当中小编将会给大家带来有关MySQL中怎么按表创建千万级的压测数据,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
1. 准备测试表
CREATETABLE`username`(`uid`INT(11)UNSIGNEDNOTNULLdefault1235678901,`username`VARCHAR(20),`email`VARCHAR(30),`password`VARCHAR(32),`birthday`date,`gender`VARCHAR(10),avatarMEDIUMBLOB,PRIMARYKEY(`uid`))ENGINE=INNODBDEFAULTCHARSET=utf8;
2. 随机生成数据
MySQL里面自带一个随机数生成的函数RAND(),它能生成0-1的浮点数
RAND函数生成随机数:
SETGLOBALlog_bin_trust_function_creators=1;
CREATEDEFINER=`root`@`%`FUNCTION`rand_string`(nINT)RETURNSVARCHAR(255)CHARSETutf8BEGIN
DECLARE
chars_strVARCHAR(100)DEFAULT'hwbtestABCDEFG23141HIJ6712dfghjkqwevbnqmwerqwerqwreqw214123e1214c12dssaf89';
DECLARE
return_strVARCHAR(255)DEFAULT'';
DECLARE
iINTDEFAULT0;
WHILE
i<nDO
SETreturn_str=concat(return_str,substring(chars_str,FLOOR(1+RAND()*80),1));
SETii=i+1;
ENDWHILE;
RETURNreturn_str;
END;
<img alt="详解MySQL如何按表创建<span><span><span><i @qq.com')
4. 随机生成DATE和DATETIME类型
(1) DATE类型
CREATEDEFINER=`root`@`%`FUNCTION`randDate`()RETURNSVARCHAR(255)CHARSETutf8BEGINDECLAREaDateCHAR(10)DEFAULT'';/*CONCAT(1949+FLOOR((RAND()*70))表示1949到2019的随机数据--LPAD(FLOOR(1+(RAND()*12)),2,0)表示月份的生成,小于10自动补0--LPAD(FLOOR(3+(RAND()*8)),2,0))表示3号到10号的随机数据*/SETaDate=CONCAT(1949+FLOOR((RAND()*70)),'-',LPAD(FLOOR(1+(RAND()*12)),2,0),'-',LPAD(FLOOR(3+(RAND()*8)),2,0));RETURNaDate;END;
Returnsthestringstr:str,left-paddedwiththestringpadstrtoalengthoflencharacters.
Ifstrislongerthanlen:N,thereturnvalueisshortenedtolencharacters.
mysql>SELECTLPAD('hi',4,'??');
->'??hi'
mysql>SELECTLPAD('hi',1,'??');
->'h'
(2) DATETIME类型
在刚刚写好的randDate上进行改造:
CREATEDEFINER=`root`@`%`FUNCTION`randDateTime`()RETURNSVARCHAR(255)CHARSETutf8BEGINDECLAREaDateTimeCHAR(19)DEFAULT'';SETaDateTime=CONCAT(CONCAT(1949+FLOOR((RAND()*70)),'-',LPAD(FLOOR(1+(RAND()*12)),2,0),'-',LPAD(FLOOR(3+(RAND()*8)),2,0)),'',CONCAT(LPAD(FLOOR(0+(RAND()*23)),2,0),':',LPAD(FLOOR(0+(RAND()*60)),2,0),':',LPAD(FLOOR(0+(RAND()*60)),2,0)));RETURNaDateTime;END;
5. 将数据循环插入
定义将数据循环的存储过程:
DELIMITER//CREATEPROCEDUREinsertUser()BEGINDECLAREnumINT;SETnum=1;WHILEnum<100000DOINSERTINTOusername(uid,username,email,PASSWORD,birthday,gender,avatar)VALUES(num,rand_string(15),concat(rand_string(5),'@qq.com'),rand_string(32),randDate(),'男',NULL);SETnumnum=num+1;ENDWHILE;commit;END;//
调用存储过程:
CALLinsertUser;
上述就是小编为大家分享的MySQL中怎么按表创建千万级的压测数据了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。