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

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

 更新時(shí)間:2023年11月29日 08:25:35   作者:終有救贖  
在開(kāi)發(fā)過(guò)程中我們不管是用來(lái)測(cè)試性能還是在生產(chǎn)環(huán)境中頁(yè)面展示好看一點(diǎn),?經(jīng)常需要一些測(cè)試數(shù)據(jù),?本文主要介紹了兩種常用的MySQL測(cè)試數(shù)據(jù)批量生成方式,希望對(duì)大家有所幫助

前言

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

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

一、表

準(zhǔn)備了兩張表

角色表:

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

用戶表:

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

建表語(yǔ)句:

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ù)生成

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

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

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

SHOW VARIABLES LIKE 'log_bin_trust_function_creators';

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

SET GLOBAL log_bin_trust_function_creators=1; 

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

產(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ǔ)過(guò)程

插入角色表

-- 插入角色數(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ǔ)過(guò)程

-- 執(zhí)行存儲(chǔ)過(guò)程,往dept表添加10萬(wàn)條數(shù)據(jù)
CALL insert_role(100000); 

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

小結(jié)

執(zhí)行用時(shí) 10w數(shù)據(jù)差不多半分鐘, 100w數(shù)據(jù)超過(guò)了20分鐘, 同時(shí) user的存儲(chǔ)還卡死很久…
最后都成功新增, 但是自動(dòng)遞增值和行數(shù)不一致, 這個(gè)我也不知道因?yàn)樯?hellip;

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

role表

user表

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

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

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

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

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

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

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

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

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

以上就是MySQL實(shí)現(xiàn)批量插入測(cè)試數(shù)據(jù)的方式小結(jié)的詳細(xì)內(nèi)容,更多關(guān)于MySQL批量插入數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Mysql-Insert插入過(guò)慢的原因記錄和解決方案

    Mysql-Insert插入過(guò)慢的原因記錄和解決方案

    這篇文章主要介紹了Mysql-Insert插入過(guò)慢的原因記錄和解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • mysql大批量插入數(shù)據(jù)的正確解決方法

    mysql大批量插入數(shù)據(jù)的正確解決方法

    這篇文章主要介紹了mysql大批量插入數(shù)據(jù)的正確做法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • MySQL MHA集群詳解(數(shù)據(jù)庫(kù)高可用)

    MySQL MHA集群詳解(數(shù)據(jù)庫(kù)高可用)

    MHA(MasterHighAvailability)是開(kāi)源MySQL高可用管理工具,用于自動(dòng)故障檢測(cè)與轉(zhuǎn)移,支持異步或半同步復(fù)制的MySQL主從架構(gòu),本文介紹MySQL MHA集群(數(shù)據(jù)庫(kù)高可用)的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • Mysql實(shí)戰(zhàn)練習(xí)之簡(jiǎn)單圖書(shū)管理系統(tǒng)

    Mysql實(shí)戰(zhàn)練習(xí)之簡(jiǎn)單圖書(shū)管理系統(tǒng)

    由于課設(shè)需要做這個(gè),于是就抽了點(diǎn)閑余時(shí)間,寫(xiě)了下,用Mysql與Java,基本全部都涉及到,包括借書(shū)/還書(shū),以及書(shū)籍信息的更新,查看所有的書(shū)籍。需要的朋友可以參考下
    2021-09-09
  • 專(zhuān)業(yè)級(jí)的MySQL開(kāi)發(fā)設(shè)計(jì)規(guī)范及SQL編寫(xiě)規(guī)范

    專(zhuān)業(yè)級(jí)的MySQL開(kāi)發(fā)設(shè)計(jì)規(guī)范及SQL編寫(xiě)規(guī)范

    這篇文章主要介紹了專(zhuān)業(yè)級(jí)的MySQL開(kāi)發(fā)設(shè)計(jì)規(guī)范及SQL編寫(xiě)規(guī)范,需要的朋友可以參考下
    2020-11-11
  • mysql數(shù)據(jù)NULL避坑指南分享

    mysql數(shù)據(jù)NULL避坑指南分享

    這篇文章主要介紹了mysql數(shù)據(jù)NULL避坑指南,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • mysql啟動(dòng)報(bào)錯(cuò):The?server?quit?without?updating?PID?file的幾種解決辦法匯總

    mysql啟動(dòng)報(bào)錯(cuò):The?server?quit?without?updating?PID?file的幾種

    不管是在安裝還是運(yùn)行MySQL的時(shí)候,都很有可能遇到報(bào)錯(cuò),下面這篇文章主要給大家介紹了關(guān)于mysql啟動(dòng)報(bào)錯(cuò):The?server?quit?without?updating?PID?file的幾種解決辦法,需要的朋友可以參考下
    2022-08-08
  • MySQL如何查詢數(shù)據(jù)連接方式

    MySQL如何查詢數(shù)據(jù)連接方式

    MySQL支持多種表連接(JOIN)方式,每種方式都有其特定的使用場(chǎng)景和優(yōu)缺點(diǎn),以下是?MySQL?中主要的數(shù)據(jù)連接方式及其特點(diǎn),有需要的小伙伴可以了解下
    2025-06-06
  • Mysql中常用函數(shù)之分組,連接查詢功能實(shí)現(xiàn)

    Mysql中常用函數(shù)之分組,連接查詢功能實(shí)現(xiàn)

    在MySQL中,函數(shù)可以進(jìn)行各種數(shù)據(jù)操作,如字符處理、數(shù)學(xué)計(jì)算和日期格式化等,單行函數(shù)處理單條數(shù)據(jù)記錄,而分組函數(shù)則處理多條數(shù)據(jù)記錄,本文給大家介紹Mysql中常用函數(shù)之分組,連接查詢功能實(shí)現(xiàn),感興趣的朋友一起看看吧
    2024-10-10
  • 數(shù)據(jù)庫(kù)SQL SELECT查詢的工作原理

    數(shù)據(jù)庫(kù)SQL SELECT查詢的工作原理

    今天小編就為大家分享一篇關(guān)于數(shù)據(jù)庫(kù)SQL SELECT查詢的工作原理,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03

最新評(píng)論

道孚县| 安吉县| 渭南市| 子长县| 齐河县| 西充县| 资阳市| 栖霞市| 仪征市| 乐平市| 奇台县| 翼城县| 平远县| 洪湖市| 菏泽市| 新建县| 柏乡县| 武强县| 镇原县| 信宜市| 梨树县| 大名县| 旬阳县| 湖口县| 刚察县| 施甸县| 郎溪县| 济宁市| 长沙县| 十堰市| 三穗县| 鄯善县| 东明县| 肃宁县| 台湾省| 蛟河市| 沅陵县| 盖州市| 会理县| 石家庄市| 鄄城县|