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

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

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

前言

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

  • 存儲方式+函數(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ù)生成

通過存儲過程快速插入, 通過函數(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)建存儲過程

插入角色表

-- 插入角色數(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í)行存儲過程

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

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

小結(jié)

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

數(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í)十一秒, 比第一種方法速度快很多, 推薦使用

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    專業(yè)級的MySQL開發(fā)設(shè)計(jì)規(guī)范及SQL編寫規(guī)范

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

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

    這篇文章主要介紹了mysql數(shù)據(jù)NULL避坑指南,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(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)方式,每種方式都有其特定的使用場景和優(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ù)庫SQL SELECT查詢的工作原理

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

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

最新評論

中方县| 来宾市| 庄浪县| 三穗县| 江安县| 蒲城县| 扎赉特旗| 阳西县| 大荔县| 腾冲县| 三河市| 塘沽区| 会理县| 民权县| 武城县| 临桂县| 临泉县| 图木舒克市| 汝南县| 大洼县| 新龙县| 苏尼特右旗| 马边| 同心县| 淮滨县| 岳西县| 琼海市| 高阳县| 武陟县| 阿图什市| 宿迁市| 罗定市| 白水县| 牡丹江市| 百色市| 大余县| 伊吾县| 华蓥市| 青铜峡市| 台安县| 淄博市|