这期内容当中小编将会给大家带来有关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中怎么按表创建千万级的压测数据了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。