mysql function函数_详解MySQL如何按表创建千万级的压测数据
生活随笔
收集整理的這篇文章主要介紹了
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上進行改造:
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么在jquery中使用fadeIn()
- 下一篇: windows系统字体文件夹位置在哪