最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL實(shí)現(xiàn)批量插入測試數(shù)據(jù)的方式總結(jié)

 更新時(shí)間:2023年05月12日 16:15:12   作者:寧軒  
在開發(fā)過程中經(jīng)常需要一些測試數(shù)據(jù),?這個(gè)時(shí)候如果手敲的話,?十行二十行還好,?多了就很死亡了,?接下來介紹兩種常用的MySQL測試數(shù)據(jù)批量生成方式,希望對大家有所幫助

前言

在開發(fā)過程中我們不管是用來測試性能還是在生產(chǎn)環(huán)境中頁面展示好看一點(diǎn), 又或者學(xué)習(xí)驗(yàn)證某一知識(shí)點(diǎn)經(jīng)常需要一些測試數(shù)據(jù), 這個(gè)時(shí)候如果手敲的話, 十行二十行還好, 多了就很死亡了, 接下來介紹兩種常用的MySQL測試數(shù)據(jù)批量生成方式

  • 存儲(chǔ)方式+函數(shù)
  • Navicat的數(shù)據(jù)生成

準(zhǔn)備了兩張表 角色表:

  • id: 自增長
  • role_name: 隨機(jī)字符串, 不允許重復(fù)
  • orders: 1-1000任意數(shù)字

用戶表:

  • id: 自增長
  • username: 隨機(jī)字符串, 不允許重復(fù)
  • password: 隨機(jī)字符串, 允許重復(fù)
  • role_id: 1-10w之間的任意數(shù)字

建表語句:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL COMMENT '用戶名',
  `role_id` int(11) DEFAULT NULL COMMENT '角色id',
  `password` varchar(255) DEFAULT NULL COMMENT '密碼',
  `salt` varchar(255) DEFAULT NULL COMMENT '鹽',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `role` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `role_name` varchar(255) DEFAULT NULL COMMENT '角色名',
  `orders` int(11) DEFAULT NULL COMMENT '排序權(quán)重\r\n',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

使用函數(shù)生成

通過存儲(chǔ)過程快速插入, 通過函數(shù)保證數(shù)據(jù)不重復(fù)

設(shè)置允許創(chuàng)建函數(shù)

查看 MySQL是否允許創(chuàng)建函數(shù)

SHOW VARIABLES LIKE 'log_bin_trust_function_creators';

結(jié)果如圖所示, 我們使用以下命令將創(chuàng)建函數(shù)功能打開(global-所有session都生效)

SET GLOBAL log_bin_trust_function_creators=1; 

這個(gè)時(shí)候再一次查詢就會(huì)顯示已打開

產(chǎn)生隨機(jī)字符串

-- 隨機(jī)產(chǎn)生字符串
DELIMITER $$
CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255)
BEGIN    
	DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';
	DECLARE return_str VARCHAR(255) DEFAULT '';
	DECLARE i INT DEFAULT 0;
	WHILE i < n DO  
		SET return_str =CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1+RAND()*52),1));  
		SET i = i + 1;
	END WHILE;
	RETURN return_str;
END $$
-- 假如要?jiǎng)h除
-- drop function rand_string;

產(chǎn)生隨機(jī)數(shù)字

-- 用于隨機(jī)產(chǎn)生區(qū)間數(shù)字
DELIMITER $$
CREATE FUNCTION rand_num (from_num INT ,to_num INT) RETURNS INT(11)
BEGIN   
 DECLARE i INT DEFAULT 0;  
 SET i = FLOOR(from_num +RAND()*(to_num -from_num+1));
RETURN i;  
END$$
-- 假如要?jiǎng)h除
-- drop function rand_num;

創(chuàng)建存儲(chǔ)過程

插入角色表

-- 插入角色數(shù)據(jù)
DELIMITER $$
CREATE PROCEDURE insert_role(max_num INT)
BEGIN  
	DECLARE i INT DEFAULT 0;   
	SET autocommit = 0;    
	REPEAT  
		SET i = i + 1;  
		INSERT INTO role ( role_name,orders ) VALUES (rand_string(8),rand_num(1,5000)); 
		UNTIL i = max_num  
	END REPEAT;  
	COMMIT;  
END$$
-- 刪除
-- DELIMITER ;
-- drop PROCEDURE insert_role;

插入用戶表

-- 插入用戶數(shù)據(jù)
DELIMITER $$
CREATE PROCEDURE  insert_user(START INT, max_num INT)
BEGIN  
	DECLARE i INT DEFAULT 0;   
	SET autocommit = 0;    
	REPEAT  
		SET i = i + 1;  
		INSERT INTO user (username, role_id, password, salt ) VALUES (rand_string(8) ,rand_num(1,100000), rand_string(10), rand_string(10));  
		UNTIL i = max_num  
	END REPEAT;  
	COMMIT;  
END$$
-- 刪除
-- DELIMITER ;
-- drop PROCEDURE insert_user;

執(zhí)行存儲(chǔ)過程

-- 執(zhí)行存儲(chǔ)過程,往dept表添加10萬條數(shù)據(jù)
CALL insert_role(100000); 
-- 執(zhí)行存儲(chǔ)過程,往emp表添加100萬條數(shù)據(jù),編號(hào)從100000開始
CALL insert_user(100000,1100000); 

總結(jié)

執(zhí)行用時(shí) 10w數(shù)據(jù)差不多半分鐘, 100w數(shù)據(jù)超過了20分鐘, 同時(shí) user的存儲(chǔ)還卡死很久...

最后都成功新增, 但是自動(dòng)遞增值和行數(shù)不一致, 這個(gè)我也不知道因?yàn)樯?..

數(shù)據(jù)展示

role表

user表

使用 Navicat自帶的數(shù)據(jù)生成

接下來我們使用 Navicat的數(shù)據(jù)生成

直接下一步, 然后選擇對應(yīng)的兩張表生成行數(shù)和對應(yīng)的生成規(guī)則, 基于之前的執(zhí)行速度, 這次 role生成 1w數(shù)據(jù), user生成 10w數(shù)據(jù)

對于字符串類型的字段, 我們可以設(shè)置他的隨機(jī)數(shù)據(jù)生成器, 根據(jù)需要進(jìn)行選擇

例如角色名稱, 選擇了 職位名稱 還可以進(jìn)行是否包含 null 的選擇等

但是如果是 姓名 那么就會(huì)讓你選擇是否唯一

數(shù)字的話會(huì)讓你選擇范圍, 默認(rèn)值等

等確定好了, 我們就可以點(diǎn)擊右下角進(jìn)行生成隨機(jī)測試數(shù)據(jù)

通過結(jié)果可以看到生成十一萬測試數(shù)據(jù)一共用時(shí)十一秒, 比第一種方法速度快很多, 推薦使用

到此這篇關(guān)于MySQL實(shí)現(xiàn)批量插入測試數(shù)據(jù)的方式總結(jié)的文章就介紹到這了,更多相關(guān)MySQL插入數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

霍州市| 共和县| 岳池县| 盐池县| 铅山县| 大关县| 宜丰县| 萨嘎县| 临湘市| 吴桥县| 改则县| 平遥县| 郸城县| 海伦市| 安顺市| 瓦房店市| 阳泉市| 临漳县| 安龙县| 白银市| 桐乡市| 水城县| 富蕴县| 富蕴县| 城市| 体育| 北辰区| 渭南市| 江源县| 鄄城县| 浙江省| 梓潼县| 张北县| 雷波县| 宣恩县| 德化县| 英吉沙县| 高雄县| 临城县| 左云县| 武宁县|