日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql function函数_详解MySQL如何按表创建千万级的压测数据

發(fā)布時間:2023/12/19 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql function函数_详解MySQL如何按表创建千万级的压测数据 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

概述

有時我們要對系統(tǒng)做壓測,或者數(shù)據(jù)庫壓力測試,這時候需要對某些表插入幾百萬或者上千萬數(shù)據(jù),下面介紹下怎么利用MySQL循環(huán)和存儲過程對特定表的創(chuàng)建千萬行數(shù)據(jù)。


1、準備測試表

CREATE TABLE `username` (`uid` INT( 11 ) UNSIGNED NOT NULL default 1235678901,`username` VARCHAR( 20 ) ,`email` VARCHAR( 30 ) ,`password` VARCHAR( 32 ) ,`birthday` date,`gender` VARCHAR(10) ,avatar MEDIUMBLOB,PRIMARY KEY ( `uid` )) ENGINE = INNODB DEFAULT CHARSET=utf8;

2、隨機生成數(shù)據(jù)

MySQL里面自帶一個隨機數(shù)生成的函數(shù)RAND(),它能生成0-1的浮點數(shù)

RAND函數(shù)生成隨機數(shù):


3、隨機生成給定數(shù)目的字符串

這里用mysql循環(huán),循環(huán)采用WHILE循環(huán),循環(huán)里面采用字符串拼接函數(shù)CONCAT

SET GLOBAL log_bin_trust_function_creators = 1; CREATE DEFINER = `root` @`%` FUNCTION `rand_string` ( n INT ) RETURNS VARCHAR ( 255 ) CHARSET utf8 BEGINDECLAREchars_str VARCHAR ( 100 ) DEFAULT 'hwbtestABCDEFG23141HIJ6712dfghjkqwevbnqmwerqwerqwreqw214123e1214c12dssaf89';DECLAREreturn_str VARCHAR ( 255 ) DEFAULT '';DECLAREi INT DEFAULT 0;WHILEi < n DOSET return_str = concat( return_str, substring( chars_str, FLOOR( 1 + RAND( ) * 80 ), 1 ) );SET i = i + 1;END WHILE;RETURN return_str;END;

用戶名和密碼都可以通過以上的方式添加

郵箱的添加方式:可直接在insert的value對應字段寫上concat(rand_string(5), '@qq.com')


4、隨機生成DATE和DATETIME類型

4.1、DATE類型

CREATE DEFINER = `root` @`%` FUNCTION `randDate` ( ) RETURNS VARCHAR ( 255 ) CHARSET utf8 BEGINDECLAREaDate CHAR ( 10 ) DEFAULT '';/*CONCAT (1949 + FLOOR( ( RAND( ) * 70 ) ) 表示 1949到2019的隨機數(shù)據(jù) --L PAD ( FLOOR( 1 + ( RAND( ) * 12 ) ), 2, 0 ) 表示月份的生成,小于 10自動補0 --L PAD ( FLOOR( 3 + ( RAND( ) * 8 ) ), 2, 0 ) ) 表示 3號到10號的隨機數(shù)據(jù) */SET aDate = CONCAT(1949 + FLOOR( ( RAND( ) * 70 ) ),'-',LPAD( FLOOR( 1 + ( RAND( ) * 12 ) ), 2, 0 ),'-',LPAD( FLOOR( 3 + ( RAND( ) * 8 ) ), 2, 0 ) );RETURN aDate;END;

關(guān)于LPAD函數(shù),具體做為月份和日期的補零作用!生效如下介紹

Returns the string str:str, left-padded with the string padstr to a length of len characters. If str is longer than len:N, the return value is shortened to len characters.mysql> SELECT LPAD('hi',4,'??');-> '??hi'mysql> SELECT LPAD('hi',1,'??');-> 'h'

4.2、DATETIME類型
在剛剛寫好的randDate上進行改造:

CREATE DEFINER = `root` @`%` FUNCTION `randDateTime` ( ) RETURNS VARCHAR ( 255 ) CHARSET utf8 BEGINDECLAREaDateTime CHAR ( 19 ) DEFAULT '';SET aDateTime = 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 ) ) );RETURN aDateTime;END;

5、將數(shù)據(jù)循環(huán)插入

定義將數(shù)據(jù)循環(huán)的存儲過程:

DELIMITER //CREATE PROCEDURE insertUser ( ) BEGINDECLAREnum INT;SET num = 1;WHILEnum < 100000 DOINSERT INTO username ( uid,username, email, PASSWORD, birthday, gender, avatar )VALUES( num,rand_string ( 15 ),concat( rand_string ( 5 ), '@qq.com' ),rand_string ( 32 ),randDate ( ),'男',NULL );SET num = num + 1;END WHILE;commit;END;//

調(diào)用存儲過程:

CALL insertUser;

覺得有用的朋友多幫忙轉(zhuǎn)發(fā)哦!后面會分享更多devops和DBA方面的內(nèi)容,感興趣的朋友可以關(guān)注下~

總結(jié)

以上是生活随笔為你收集整理的mysql function函数_详解MySQL如何按表创建千万级的压测数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。