当前位置: 首页 > news >正文

【MySQL】MySQL批量插入测试数据的几种方式

文章目录

  • 前言
  • 一、表
  • 二、使用函数生成
    • 设置允许创建函数
      • 产生随机字符串
      • 产生随机数字
  • 三、创建存储过程
    • 插入角色表
    • 插入用户表
  • 四、执行存储过程
  • 小结
  • 五、使用 Navicat自带的数据生成

前言

在开发过程中我们不管是用来测试性能还是在生产环境中页面展示好看一点, 又或者学习验证某一知识点经常需要一些测试数据, 这个时候如果手敲的话, 十行二十行还好, 多了就很死亡了, 接下来介绍两种常用的MySQL测试数据批量生成方式

  • 存储方式+函数
  • Navicat的数据生成

一、表

准备了两张表

  • 角色表:

    • id: 自增长
    • role_name: 随机字符串, 不允许重复
    • orders: 1-1000任意数字
  • 用户表:

    • id: 自增长
    • username: 随机字符串, 不允许重复
    • password: 随机字符串, 允许重复
    • role_id: 1-10w之间的任意数字
  • 建表语句:

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 '排序权重\r\n',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

二、使用函数生成

通过存储过程快速插入, 通过函数保证数据不重复

设置允许创建函数

查看 MySQL是否允许创建函数

SHOW VARIABLES LIKE 'log_bin_trust_function_creators';

在这里插入图片描述

结果如图所示, 我们使用以下命令将创建函数功能打开(global-所有session都生效)

SET GLOBAL log_bin_trust_function_creators=1; 

在这里插入图片描述

这个时候再一次查询就会显示已打开
在这里插入图片描述

产生随机字符串

-- 随机产生字符串
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;

产生随机数字

-- 用于随机产生区间数字
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;

三、创建存储过程

插入角色表

-- 插入角色数据
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;

插入用户表

-- 插入用户数据
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;

四、执行存储过程

-- 执行存储过程,往dept表添加10万条数据
CALL insert_role(100000); -- 执行存储过程,往emp表添加100万条数据,编号从100000开始
CALL insert_user(100000,1100000); 

小结

执行用时 10w数据差不多半分钟, 100w数据超过了20分钟, 同时 user的存储还卡死很久…
最后都成功新增, 但是自动递增值和行数不一致, 这个我也不知道因为啥…
在这里插入图片描述

数据展示

  • role表

在这里插入图片描述

  • user表

在这里插入图片描述

五、使用 Navicat自带的数据生成

接下来我们使用 Navicat的数据生成

在这里插入图片描述
在这里插入图片描述

直接下一步, 然后选择对应的两张表生成行数和对应的生成规则, 基于之前的执行速度, 这次 role生成 1w数据, user生成 10w数据
对于字符串类型的字段, 我们可以设置他的随机数据生成器, 根据需要进行选择
在这里插入图片描述

例如角色名称, 选择了 职位名称 还可以进行是否包含 null 的选择等
在这里插入图片描述

但是如果是 姓名 那么就会让你选择是否唯一
在这里插入图片描述

数字的话会让你选择范围, 默认值等
在这里插入图片描述

等确定好了, 我们就可以点击右下角进行生成随机测试数据
在这里插入图片描述

通过结果可以看到生成十一万测试数据一共用时十一秒, 比第一种方法速度快很多, 推荐使用

相关文章:

【MySQL】MySQL批量插入测试数据的几种方式

文章目录 前言一、表二、使用函数生成设置允许创建函数产生随机字符串产生随机数字 三、创建存储过程插入角色表插入用户表 四、执行存储过程小结五、使用 Navicat自带的数据生成 前言 在开发过程中我们不管是用来测试性能还是在生产环境中页面展示好看一点, 又或者学习验证某…...

PowerShell install 一键部署virtualbox

VirtualBox 前言 VirtualBox 是一款开源虚拟机软件。VirtualBox 是由德国 Innotek 公司开发&#xff0c;由Sun Microsystems公司出品的软件&#xff0c;使用Qt编写&#xff0c;在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。Innotek 以 GNU General Public Licens…...

CTF权威指南 笔记 -第四章Linux安全机制-4.1-Stack Canaries

目录 Stack Canaries 简介 我们进行简单的例子 64 32 checksec Stack Canaries 是对抗栈溢出攻击的技术 SSP安全机制 Canary 的值 栈上的一个随机数 在程序启动时 随机生成并且保存在比返回地址更低值 栈溢出是从低地址向高地址进行溢出 如果攻击者要攻击 就一定要覆…...

KDZD400Q便携式三氯乙烯浓度检测仪

一、产品概述 检测仪用于快速检测多种气体浓度、温湿度测量并超标报警的场合。采用2.31寸高清彩屏实时显示&#xff0c;选用进口品牌的气体传感器&#xff0c;主要检测原理有&#xff1a;电化学、红外、催化燃烧、热导、PID 光离子等。 可以检测管道中或受限空间、大气环境中的…...

C++11 部分新特性

1. 关键字和语法 1.1 nullptr 空指针&#xff0c;能够和整数0进行区别&#xff0c;因为#define NULL 0 1.2 类中非静态成员变量定义时初始化 & 初始化列表 1.3 auto 可推导出右值类型&#xff0c;从而得知左边变量类型。 简单使用示例&#xff1a; auto func() {retur…...

selenium通过performance log获取状态码,Conten-Type,以及重定向路径

selenium的官方不提供获取状态码&#xff0c;Conten-Type&#xff0c;以及重定向路径的方法&#xff0c;并且官方说这些功能将来也不会有。java - How to get HTTP Response Code using Selenium WebDriver - Stack Overflow 非官方的方法大概有下面几种 1.通过requests重新请…...

GL绘制自定义线条3_自定义线帽

安卓Path搭配Paint可以设置线帽&#xff0c;我想能不能把我自己的线条绘制Demo也加上类似的功能。 线头规则描述&#xff1a; 1、设一个线宽一半的线段&#xff0c;坐标为(0, 0)到(-lineWidth / 2, 0)。 2、设步骤1的线段有一垂直于它的向量(0&#xff0c;1)&#xff0c;然后传…...

【AGC】新版鸿蒙崩溃SDK集成使用方法

【背景】 我们知道AGC的Crash SDK都是需要强制集成华为分析SDK的&#xff0c;在使用时的崩溃数据上报都要依靠分析服务来完成&#xff0c;这就容易受到限制&#xff0c;有时出现无数据的情况就要依次排查崩溃SDK与分析SDK&#xff0c;比较麻烦。而就在不久前&#xff0c;鸿蒙崩…...

vue-7:组件库(移动端vant)(PC端element)

移动端vant 插件安装&#xff08;按需导入&#xff09; 重启生效 # 通过 npm 安装 npm i unplugin-vue-components -D# 通过 yarn 安装 yarn add unplugin-vue-components -D 导入基于 vite 的项目&#xff1a; 如果是基于 vite 的项目&#xff0c;在 vite.config.js 文件中…...

JavaScript中splice()、slice()、split()三种方法的区别,及使用详细

简介&#xff1a;splice、slice、split是JavaScript中&#xff0c;比较常用的三个数组方法&#xff0c;表面看起来有点相像&#xff0c;用处却大不相同&#xff0c;今天就来分别介绍下它们的用法。 1、splice()方法 splice方法可以用来删除数组中的元素&#xff0c;或者向数组…...

Linux更新操作系统Openssh版本9.3p1(源码编译安装)

Linux更新操作系统Openssh版本9.3p1(源码编译安装) 部署前准备 安装依赖 yum install -y gcc gcc-c glibc make autoconf openssl openssl-devel pcre-devel pam-develyum install -y pam* zlib* openssh-9.3p1.tar.gzopenssl-3.1.0.tar.gz备份文件 cp /etc/pam.d/sshd /etc/…...

MS COCO数据集介绍

MS COCO数据集介绍 MS COCO全称是Microsoft Common Objects in Context&#xff0c;是由微软开发维护的大型图像数据集&#xff0c;包括不同检测任务&#xff1a; Object Detection&#xff08;[主要处理人、车、大象等]&#xff09; DensePose&#xff08;姿态密度检测&…...

Java之线程池

目录 一.上节复习 1.阻塞队列 二.线程池 1.什么是线程池 2.为什么要使用线程池 3.JDK中的线程池 三.工厂模式 1.工厂模式的目的 四.使用线程池 1.submit()方法 2.模拟两个阶段任务的执行 五.自定义一个线程池 六.JDK提供线程池的详解 1.如何自定义一个线程池? 2.创…...

让你的网站变得更智能 - B2 Pro主题问答模块新增OpenAI ChatGPT机器人自动回答功能

作为一个网站管理员,你一定会希望能够给你的用户提供更多、更好的服务。那么,你是否曾经想过为你的B2 Pro主题问答模块新增一个智能机器人自动回答功能呢?相信你一定想要这个功能,因为它能够大大提升你网站的用户体验。 现在,我们为你提供了一个好消息。我们已经为B2 Pro…...

仓库信息管理系统设计与实现

一、数据库设计 1.数据库模型设计概览 2.数据库表设计 ①depository 描述&#xff1a; 该表存储仓库的信息&#xff0c;比如仓库名称&#xff0c;仓库地址和仓库介绍 表结构&#xff1a; 序号 字段名 数据类型 主键 非空 默认值 描述 1 id INT(10) 是 是 2…...

初识Java多线程编程

文章目录 一、线程的状态二、线程的常见属性三、多线程编程Thread类常用构造方法1.继承Thread类2.实现Runnable接口3.匿名内部类实现4.lambda 表达式创建 Runnable 子类对象 四、线程的常见方法 一、线程的状态 //线程的状态是一个枚举类型 Thread.State public class ThreadS…...

最新入河排污口设置论证、水质影响预测与模拟、污水处理工艺分析及典型建设项目入河排污口方案报告书实例分析

随着水资源开发利用量不断增大&#xff0c;全国废污水排放量与日俱增&#xff0c;部分河段已远远超出水域纳污能力。近年来,部分沿岸入河排污口设置不合理&#xff0c;超标排污、未经同意私设排污口等问题逐步显现&#xff0c;已威胁到供水安全、水环境安全和水生态安全&#x…...

awk指令的详细指南

目录 工作原理 命令格式 awk常见的内建变量&#xff08;可直接用&#xff09;如下所示 按行输出文本 按字段输出文本 通过管道、双引号调用 Shell 命令 示例 CPU使用率 数组 ​编辑统计文件的内容出现的次数 使用awk 统计secure 访问日志中每个客户端IP的出现次数? …...

解密Netty中的Reactor模式

文章目录 单线程Reactor模式多线程Reactor模式Reactor模式中IO事件的处理流程Netty中的通道ChannelNetty中的反应器ReactorNetty中的处理器HandlerNetty中的通道Channel和处理器Handler的协作组件Pipeline Reactor(反应器)模式是高性能网络编程在设计和架构方面的基础模式.Doug…...

这是一个黑科技:C++爬虫~(文末报名C/C++领域新星计划)

目录 写在前面 完整代码 这里必看!! 写在最后 写在前面 现在所有人都知道万能的Python可以做机器学习,可以做人工智能,可以爬取各种小网站,但是你不知道,基于C++的正则表达式早就能够爬取各种网络数据啦!!你没猜错,阿玥将在这篇文章中简介怎么用C...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...