MySQL使用函数、存储过程实现:向数据表快速插入大量测试数据

实现数据表快速插入20W测试数据

  • 实现过程
    • 创建表
    • 开启允许创建函数
    • 生成随机字符串
    • 生成随机整数
    • 生成随机地址
    • 创建存储过程
    • 调用存储过程
    • 查看插入数据
  • 其他实用函数
    • 生成随机浮点数
    • 生成随机日期时间
    • 生成随机布尔值
    • 生成随机姓名
    • 生成随机手机号码
    • 生成随机邮箱地址
    • 生成随机IP地址
    • 生成随机文件名
    • 生成随机密码

实现过程

创建表

CREATE TABLE `user` (`id` INT(11) NOT NULL AUTO_INCREMENT,`name` VARCHAR(20) DEFAULT NULL,`age` INT(3) DEFAULT NULL,`pwd` VARCHAR(20) DEFAULT NULL,`address` VARCHAR(30) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1;

开启允许创建函数

查看mysql是否允许创建函数:

SHOW VARIABLES LIKE 'log_bin_trust_function_creators';

开启允许创建函数设置:

global: 所有session都生效

SET GLOBAL log_bin_trust_function_creators=1; 

生成随机字符串

用于生成一个由随机字符组成的字符串,字符串的长度由参数 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 $$

函数主要逻辑:

1.定义一个包含所有可能字符的字符串 chars_str2.初始化一个空字符串 return_str,用于存储生成的随机字符串3.使用循环(WHILE)生成长度为 n 的随机字符串:通过FLOOR(1+RAND()*52)生成一个随机索引值,表示在可能字符字符串 chars_str 中取一个字符使用 SUBSTRING 函数从 chars_str 中提取一个字符将提取的字符添加到 return_str 中更新计数器 i 的值4.循环结束后,返回生成的随机字符串 return_str

删除函数

drop function rand_string;

生成随机整数

用于生成一个随机整数,整数的范围由参数 from_num 和 to_num 指定。函数的作用是在指定的范围内生成一个随机整数。

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$$

函数主要逻辑:

1.定义一个整数变量 i,初始化为 02.通过公式 FLOOR(from_num + RAND() * (to_num - from_num + 1)) 生成一个随机整数RAND() 返回一个范围为 [0, 1) 的随机小数(to_num - from_num + 1) 计算范围内的整数个数RAND() * (to_num - from_num + 1) 将随机小数映射到整数范围内from_num + RAND() * (to_num - from_num + 1) 将映射后的整数范围移动到指定的起始位置FLOOR(from_num + RAND() * (to_num - from_num + 1)) 取整,得到最终的随机整数3.返回生成的随机整数 i

删除函数

drop function rand_num;

生成随机地址

该函数返回一个随机生成的地址,可以根据需求在函数内指定常见的城市和街道列表。

DELIMITER $$
CREATE FUNCTION rand_address() RETURNS VARCHAR(255)
BEGINDECLARE cities VARCHAR(255) DEFAULT 'New York,Los Angeles,Chicago,Houston,Phoenix,Philadelphia,San Antonio,San Diego';DECLARE streets VARCHAR(255) DEFAULT 'Main St,First St,Second St,Maple Ave,Oak St,Pine St,Cedar Rd,Elm St';DECLARE city VARCHAR(255);DECLARE street VARCHAR(255);SET city = SUBSTRING_INDEX(SUBSTRING_INDEX(cities, ',', FLOOR(1 + RAND() * (LENGTH(cities) - 1))), ',', -1);SET street = SUBSTRING_INDEX(SUBSTRING_INDEX(streets, ',', FLOOR(1 + RAND() * (LENGTH(streets) - 1))), ',', -1);RETURN CONCAT(street, ', ', city);
END$$

函数主要逻辑:

1.声明四个变量:cities、streets、city和street。cities和streets变量分别保存城市和街道的名称列表,使用逗号进行分隔。city和street变量用于存储从列表中随机选取的城市和街道名称。2.函数使用SUBSTRING_INDEX()函数和RAND()函数来随机选择一个城市和一个街道。LENGTH(cities)-1:LENGTH(cities)返回城市名称列表cities的长度,减去1,得到列表中城市名称的数目RAND()*(LENGTH(cities)-1):RAND()返回一个范围为[0,1)的随机小数,将其乘以城市名称数目,得到一个从0到城市数目减1的随机小数值FLOOR(1+RAND()*(LENGTH(cities)-1)):将上一步得到的随机小数加1,并向下取整,得到一个从1到城市数目的整数值。这个整数值将作为随机选择城市名称的索引SUBSTRING_INDEX(cities,',',FLOOR(1+RAND()*(LENGTH(cities)-1))):使用SUBSTRING_INDEX()函数根据逗号分隔符,将城市名称列表cities按照随机索引截取,获取到从开头到随机索引的子字符串SUBSTRING_INDEX(SUBSTRING_INDEX(cities,',',FLOOR(1+RAND()*(LENGTH(cities)-1))),',',-1):在第4步得到的子字符串基础上,使用SUBSTRING_INDEX()函数再次截取,按照逗号分隔符从右向左获取到最后一个片段,即随机选择的城市名称3.使用CONCAT()函数将选取的街道和城市名称以特定的格式进行拼接,形成最终的随机地址字符串。

创建存储过程

编写存储过程插入数据

CREATE DEFINER=`root`@`%` PROCEDURE `insert_user`(max_num INT)
BEGIN  DECLARE i INT DEFAULT 0;   # 把autocommit设置成0  SET autocommit = 0;    REPEAT  SET i = i + 1;  INSERT INTO user (`name`, age, pwd, address ) VALUES (rand_name(), rand_num(18,80), rand_string(12), rand_address());  UNTIL i = max_num  END REPEAT;  COMMIT;  
END

删除存储过程

DELIMITER ;
drop PROCEDURE insert_user;

调用存储过程

-- 执行存储过程,往表添加20万条数据
CALL insert_user(200000); 

查看插入数据

在这里插入图片描述

其他实用函数

生成随机浮点数

该函数接收最小值 min_val 和最大值 max_val 作为参数,返回在指定范围内生成的随机浮点数。

DELIMITER $$
CREATE FUNCTION rand_float(min_val FLOAT, max_val FLOAT) RETURNS FLOAT
BEGINDECLARE rand_num FLOAT;SET rand_num = min_val + RAND() * (max_val - min_val);RETURN rand_num;
END$$

生成随机日期时间

该函数接收起始日期和结束日期作为参数,返回在指定范围内生成的随机日期时间。

DELIMITER $$
CREATE FUNCTION rand_datetime(start_date DATETIME, end_date DATETIME) RETURNS DATETIME
BEGINDECLARE rand_datetime DATETIME;SET rand_datetime = start_date + INTERVAL FLOOR(RAND() * TIMESTAMPDIFF(SECOND, start_date, end_date)) SECOND;RETURN rand_datetime;
END$$

生成随机布尔值

该函数返回一个随机的布尔值(真或假)

DELIMITER $$
CREATE FUNCTION rand_boolean() RETURNS BOOLEAN
BEGINRETURN RAND() < 0.5;
END$$

生成随机姓名

该函数返回一个随机生成的姓名,可根据需要在函数内指定常见的名字和姓氏列表。

DELIMITER $$
CREATE FUNCTION rand_name() RETURNS VARCHAR(255)
BEGINDECLARE first_names VARCHAR(255) DEFAULT 'John,Mary,Michael,Sophia,James,Emma,William,Olivia';DECLARE last_names VARCHAR(255) DEFAULT 'Smith,Johnson,Williams,Jones,Brown,Taylor,Miller,Wilson';DECLARE first_name VARCHAR(255);DECLARE last_name VARCHAR(255);SET first_name = SUBSTRING_INDEX(SUBSTRING_INDEX(first_names, ',', FLOOR(1 + RAND() * (LENGTH(first_names) - 1))), ',', -1);SET last_name = SUBSTRING_INDEX(SUBSTRING_INDEX(last_names, ',', FLOOR(1 + RAND() * (LENGTH(last_names) - 1))), ',', -1);RETURN CONCAT(first_name, ' ', last_name);
END$$

生成随机手机号码

该函数返回一个随机生成的手机号码,前缀默认为 “1”,后缀为随机生成的位数。

DELIMITER $$
CREATE FUNCTION rand_phone_number() RETURNS VARCHAR(11)
BEGINDECLARE prefix VARCHAR(1) DEFAULT '1';DECLARE suffix VARCHAR(10);SET suffix = LPAD(FLOOR(RAND() * 10000000000), 10, '0');RETURN CONCAT(prefix, suffix);
END$$

生成随机邮箱地址

该函数返回一个随机生成的邮箱地址,前缀长度通过参数 prefix_length 指定,默认为字母和数字的随机组合。

DELIMITER $$
CREATE FUNCTION rand_email(prefix_length INT) RETURNS VARCHAR(255)
BEGINDECLARE domain VARCHAR(255) DEFAULT 'example.com';DECLARE prefix VARCHAR(255);SET prefix = CONCAT(SUBSTRING('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', FLOOR(1 + RAND() * 62), 1), SUBSTRING('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', FLOOR(1 + RAND() * 62), prefix_length - 1));RETURN CONCAT(prefix, '@', domain);
END$$

生成随机IP地址

该函数返回一个随机生成的 IP 地址,由 4 个随机生成的 0-255 之间的数字组成。

DELIMITER $$
CREATE FUNCTION rand_ip_address() RETURNS VARCHAR(20)
BEGINDECLARE ip_address VARCHAR(20);SET ip_address = CONCAT(FLOOR(RAND() * 256), '.', FLOOR(RAND() * 256), '.', FLOOR(RAND() * 256), '.', FLOOR(RAND() * 256));RETURN ip_address;
END$$

生成随机文件名

该函数返回一个随机生成的指定长度和扩展名的文件名,文件名由字母和数字的随机组合构成。

DELIMITER $$
CREATE FUNCTION rand_file_name(length INT, extension VARCHAR(10)) RETURNS VARCHAR(255)
BEGINDECLARE characters VARCHAR(255) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';DECLARE file_name VARCHAR(255);SET file_name = '';WHILE LENGTH(file_name) < length DOSET file_name = CONCAT(file_name, SUBSTRING(characters, FLOOR(1 + RAND() * 62), 1));END WHILE;SET file_name = CONCAT(file_name, '.', extension);RETURN file_name;
END$$

生成随机密码

该函数返回一个随机生成的密码,长度由参数 length 指定,默认为字母、数字和特殊字符的随机组合。

DELIMITER $$
CREATE FUNCTION rand_password(length INT) RETURNS VARCHAR(255)
BEGINDECLARE characters VARCHAR(255) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*';DECLARE password VARCHAR(255);SET password = '';WHILE LENGTH(password) < length DOSET password = CONCAT(password, SUBSTRING(characters, FLOOR(1 + RAND() * 70), 1));END WHILE;RETURN password;
END$$

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/103896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Server 创建表

切换数据库&#xff0c;判断是否存在 --切换数据库 use DBTEST--判断表是否存在 --创建的所有表都可以在sys.boject中找到&#xff0c;所以这里在sys.objects中查找是否有名字为department的表并且type为U 即用户生成的表 if exists(select * from sys.objects where namedepa…

GraphQL 查询:一个全面指南

GraphQL GraphQL 是一种 API 查询语言和运行时&#xff0c;用于使用现有数据完成这些查询。它为您的 API 中的数据提供了完整且易于理解的描述&#xff0c;让客户能够准确地询问他们需要什么&#xff0c;更容易随着时间的推移发展 API&#xff0c;并启用强大的开发人员工具。 …

TypeScript React(上)

目录 扩展学习资料 TypeScript设计原则 TypeScript基础 语法基础 变量声明 JavaScript声明变量 TypeScript声明变量 示例 接口 (标准类型-Interface) 类型别名-Type 接口 VS 类型别名 类型断言:欺骗TS&#xff0c;肯定数据符合结构 泛型、<大写字母> 扩展学习…

IDEA 配置 云服务器远程部署

目录 参考资料远程部署与远程开发远程连接配置配置成功&#xff1a;同步文件自动更新文件配置自动更新文件参数调整正确运行问题1&#xff1a;运行mvn spring-boot:run之后一直卡在第一条下载问题2&#xff1a;运行成功后访问不到问题3&#xff1a;无法配置远程开发 参考资料 …

4.springcloudalibaba sentinel v1.8.6版本服务搭建

文章目录 前言一、sentinel服务端安装1.1 服务端下载1.2 启动sentinel服务 二、客户端使用sentinel2.1.pom增加sentinel包2.2 增加配置2.3 启动服务 三、验证3.1 给hello接口增加流控规则3.2 测试结果如下 总结 前言 前面完成了gateway项目部署并且测试&#xff0c;现在部署搭…

springboot vue 部署至Rocky(Centos)并自启,本文部署是若依应用

概述 1、安装nohup&#xff08;后台进程运行java&#xff09; 2、安装中文字体&#xff08;防止中文乱码&#xff09; 3、安装chrony&#xff08;保证分布式部署时间的一致性&#xff09; 5、安装mysql数据&#xff0c;迁移目录&#xff0c;并授权自启动&#xff1b; 6、安…

UI自动化测试:Selenium+PO模式+Pytest+Allure整合

本人目前工作中未涉及到WebUI自动化测试&#xff0c;但为了提升自己的技术&#xff0c;多学习一点还是没有坏处的&#xff0c;废话不多说了&#xff0c;目前主流的webUI测试框架应该还是selenium&#xff0c;考虑到可维护性、拓展性、复用性等&#xff0c;我们采用PO模式去写我…

基于Dockerfile搭建LNMP环境

准备工作 #关闭防火墙和防护机制 systemctl stop firewalld systemctl disable firewalld setenforce 0 docker network create --subnet172.18.0.0/16 --opt "com.docker.network.bridge.name""docker1" mynetwork#设置自定义网络模式&#xff0c;模…

力扣:611. 有效三角形的个数

今日为大家分享一道力扣611有效三角形的个数&#xff01;本文将会为大家为大家讲解题目&#xff0c;然后算法思路&#xff0c;最后再进行代码的实现&#xff01;希望看完本文能对读者有一定的收获&#xff01; 一、题目描述 通过题目的描述可以看出&#xff0c;意思是给定一个…

Go If流程控制与快乐路径原则

Go if流程控制与快乐路径原则 文章目录 Go if流程控制与快乐路径原则一、流程控制基本介绍二、if 语句2.1 if 语句介绍2.2 单分支结构的 if 语句形式2.3 Go 的 if 语句的特点2.3.1 分支代码块左大括号与if同行2.3.2 条件表达式不需要括号 三、操作符3.1 逻辑操作符3.2 操作符的…

Linux:redis的基础操作

redis介绍&#xff0c;安装和性能测试 Linux&#xff1a;redis数据库源码包安装-CSDN博客https://blog.csdn.net/w14768855/article/details/133752744?spm1001.2014.3001.5501如果没有了解过redis那么一定要去看看介绍 登录 redis-cli 可以登录到本机127.0.0.1&#xff0c;…

没用的知识增加了,尝试用文心实现褒义词贬义词快速分类

尝试用文心实现褒义词贬义词快速分类 一、我的需求二、项目环境搭建千帆SDK安装及使用流程 三、项目实现过程创建应用获取签名调用接口计算向量积总结 百度世界大会将于10月17日在北京首钢园举办&#xff0c;今天进入倒计时五天了。通过官方渠道的信息了解到&#xff0c;这次是…

Jmeter连接mysql数据库详细步骤

一、一般平常工作中使用jmeter 连接数据库的作用 主要包括&#xff1a; 1、本身对数据库进行测试&#xff08;功能、性能测试&#xff09;时会需要使用jmeter连接数据库 2、功能测试时&#xff0c;测试出来的结果需要和数据库中的数据进行对比是否正确一致。这时候可以通过j…

XML外部实体注入攻击XXE

xml是扩展性标记语言&#xff0c;来标记数据、定义数据类型&#xff0c;是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义&#xff08;可选&#xff09;、文档元素&#xff0c;一般无法直接打开&#xff0c;可以选择用excl或记事本打…

内存空间的分配与回收之连续分配管理方式

1.连续分配管理方式 连续分配:指为用户进程分配的必须是一个连续的内存空间。 1.单一连续分配 在单一连续分配方式中&#xff0c;内存被分为系统区和用户区。系统区通常位于内存的低地址部分&#xff0c;用于存放操作系统相关数据;用户区用于存放用户进程相关数据。内存中只…

2023年淘宝天猫双11活动时间什么时候开始到几月几号结束?

2023年淘宝天猫双11超级红包领取时间 第一阶段&#xff1a;2023年10月24日20:00 至11月03日23:59 第二阶段&#xff1a;2023年11月04日00:00 至 11月11日23:59 2023年淘宝天猫双11超级红包使用时间 第一阶段&#xff1a;2023年10月31日20:00 至11月03日23:59 第二阶段&…

Xcode 14.3.1build 报错整理

1、Command PhaseScriptExecution failed with a nonzero exit code 2、In /Users/XX/XX/XX/fayuan-mediator-app-rn/ios/Pods/CocoaLibEvent/lib/libevent.a(buffer.o), building for iOS Simulator, but linking in object file built for iOS, file /Users/XX/XX/XX/fayuan…

微服务设计原则:构建弹性和可维护的应用

文章目录 1. 单一职责原则2. 独立性和自治性3. 弹性和容错性4. API 网关5. 日志和监控6. 版本管理7. 自动化部署和持续集成8. 安全性9. 数据一致性10. 文档和通信拓展思考结论 &#x1f389;欢迎来到架构设计专栏~微服务设计原则&#xff1a;构建弹性和可维护的应用 ☆* o(≧▽…

Qt打开ui文件经常报错

报错如下&#xff1a; 解决方法&#xff1a; 最后设置成默认值 即可

竞赛选题 深度学习 机器视觉 人脸识别系统 - opencv python

文章目录 0 前言1 机器学习-人脸识别过程人脸检测人脸对其人脸特征向量化人脸识别 2 深度学习-人脸识别过程人脸检测人脸识别Metric Larning 3 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 人脸识别系统 该项目…