欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

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

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

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

用戶表:

  • id: 自增長
  • username: 隨機字符串, 不允許重復(fù)
  • password: 隨機字符串, 允許重復(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; 

這個時候再一次查詢就會顯示已打開

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

-- 隨機產(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 $$
-- 假如要刪除
-- drop function rand_string;

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

-- 用于隨機產(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$$
-- 假如要刪除
-- 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í)行用時 10w數(shù)據(jù)差不多半分鐘, 100w數(shù)據(jù)超過了20分鐘, 同時 user的存儲還卡死很久...

最后都成功新增, 但是自動遞增值和行數(shù)不一致, 這個我也不知道因為啥...

數(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è)置他的隨機數(shù)據(jù)生成器, 根據(jù)需要進行選擇

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

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

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

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

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

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

相關(guān)文章

  • mysql下怎樣運行腳本以運行niuzi.sql為例

    mysql下怎樣運行腳本以運行niuzi.sql為例

    mysql下運行腳本,有兩種方法,都是在命令行下進行的,需要的朋友可以記錄下
    2014-07-07
  • mysql varchar類型求和實例操作

    mysql varchar類型求和實例操作

    在本文里我們給大家分享了關(guān)于mysql varchar類型求和實例操作以及相關(guān)知識點,需要的朋友們學(xué)習(xí)參考下。
    2019-03-03
  • MYSQL大表加索引的實現(xiàn)

    MYSQL大表加索引的實現(xiàn)

    本文主要介紹了MYSQL大表加索引的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Linux系統(tǒng)下mysqlcheck修復(fù)數(shù)據(jù)庫命令(詳解)

    Linux系統(tǒng)下mysqlcheck修復(fù)數(shù)據(jù)庫命令(詳解)

    下面小編就為大家?guī)硪黄狶inux系統(tǒng)下mysqlcheck修復(fù)數(shù)據(jù)庫命令(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,祝大家游戲愉快哦
    2016-12-12
  • Mysql Update批量更新的幾種方式

    Mysql Update批量更新的幾種方式

    今天小編就為大家分享一篇關(guān)于Mysql Update批量更新的幾種方式,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • MySQL查看與修改字符集的方法實例教程

    MySQL查看與修改字符集的方法實例教程

    這篇文章主要給大家介紹了關(guān)于MySQL查看與修改字符集的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • mssql2008 自定義表類型實現(xiàn)(批量插入或者修改)

    mssql2008 自定義表類型實現(xiàn)(批量插入或者修改)

    在做大型網(wǎng)站或者系統(tǒng)的時候,經(jīng)常會遇到個問題就是批量插入或者修改數(shù)據(jù)庫;今天這邊不講SqlBulkCopy,只簡單講sql自定義表類型,感興趣的朋友可以了解下哦,希望本文對你有所幫助
    2013-01-01
  • MYSQL數(shù)據(jù)庫Innodb?引擎mvcc鎖實現(xiàn)原理

    MYSQL數(shù)據(jù)庫Innodb?引擎mvcc鎖實現(xiàn)原理

    這篇文章主要介紹了MYSQL數(shù)據(jù)庫Innodb?引擎mvcc鎖實現(xiàn)原理,但是mvcc?的實現(xiàn)原理是什么呢?下文我們就來實例說明來mvcc?的實現(xiàn)原理,感興趣的小伙伴可以參考一下
    2022-05-05
  • MySQL判別InnoDB表是獨立表空間還是共享表空間的方法詳解

    MySQL判別InnoDB表是獨立表空間還是共享表空間的方法詳解

    這篇文章主要給大家介紹了關(guān)于MySQL判別InnoDB表是獨立表空間還是共享表空間的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • mysql生成隨機字符串函數(shù)分享

    mysql生成隨機字符串函數(shù)分享

    這篇文章主要介紹了mysql生成隨機字符串函數(shù)分享,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-02-02

最新評論