亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • mysql下怎樣運(yùn)行腳本以運(yùn)行niuzi.sql為例

    mysql下怎樣運(yùn)行腳本以運(yùn)行niuzi.sql為例

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

    mysql varchar類型求和實(shí)例操作

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

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

    本文主要介紹了MYSQL大表加索引的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(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ù)庫命令(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,祝大家游戲愉快哦
    2016-12-12
  • Mysql Update批量更新的幾種方式

    Mysql Update批量更新的幾種方式

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論