存储过程创建测试数据

1、怎么创建测试数据
如果你会编程语言,那么你可以使用java、python、php等等语言通过对应的工具包操作数据库来完成测试数据的构建。 如果你不会这些语言,恰好你又会一些sql语句,使用存储过程完成测试数据构造是再好不过了。 并且存储过程就是sql脚本,存储、执行、查看结果都在一个工具类就可完成非常方便。(本例采用mysql数据库)

2、什么是存储过程
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中, 一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。 简单理解:完成特定功能的方法

2、表结构
首先我们先来查看下需要插入测试数据的表member,表中存放的是用户信息。




java 执行存储过程 不等待执行完成_存储过程while


3、mysql内置函数
通过上图我们已经知道了member表结构,其中RegName用户名一般会不允许重复,我们需要使用一些随机的或者有规律的字符串。 还有手机号码和注册时间这些都不是固定值,所以需要借助mysql中的内置函数:CONCAT(str1,str2,...) 拼接多个字符串
select CONCAT("test",1); 结果: test1MD5(str) md5加密
select md5(123456); 结果: e10adc3949ba59abbe56e057f20f883eRAND() 生成一个0-1之间的随机数
select RAND(); 结果: 0.70196044510413NOW()获取当前时间
select NOW(); 结果: 2019-09-23 16:15:06

4、编写存储过程
首先我们先把对member的插入语句写好,之后写存储过程就在这个基础上进行修改
insert into member values(null,'test_1',MD5(123456),18900000000,1,0,NOW());
结果:


java 执行存储过程 不等待执行完成_存储过程_02


OK,现在已经成功插入一条数据,接下来我们通过存储过程完成10000条数据的插入。
#创建一个名为 CrateTestData()的存储过程 CREATE DEFINER=`root`@`localhost` PROCEDURE `CrateTestData`() #存储过程从BEGIN开始END结束 BEGIN #用declare定义一个int类型的变量i初始值为1 declare i int default 1; /* 因为我们需要造10000条数据,肯定需要循环执行插入语句,所以先给大家介绍while循环 while循环语法: while 条件 DO 循环体; end while; */ #如果 i 小于10000 那么就继续循环,否则跳出循环 while i < 10000 do #插入语句,对用户名做了拼接,对密码进行md5加密,对手机号码、余额进行随机处理,注册日期是当前时间 insert into member values (null,CONCAT('test_',i),MD5(123456),18900000000+i,1,RAND()*100000,NOW()); #每insert一次i就加一,不然无法跳出循环 set i = i +1; end while; END
最后执行存储过程
call CrateTestData();
结果如下


java 执行存储过程 不等待执行完成_存储过程while_03


共收到 5


java 执行存储过程 不等待执行完成_存储过程怎么执行_04


bottle_7 #1 · 2 月前
你好罗杰老师,请过目一下,看看是问题出在哪吧,我只不过改成插入了1000条数据而已,如果是固定10000也不行,前面的单条数据倒是插入成功,剩下的或许是我哪里理解错了吧,麻烦老师了


java 执行存储过程 不等待执行完成_存储过程怎么执行_05


单条数据顺利插入


java 执行存储过程 不等待执行完成_存储过程怎么执行_06


java 执行存储过程 不等待执行完成_存储过程怎么执行_07


luojie #2 · 2 月前


java 执行存储过程 不等待执行完成_存储过程怎么执行_08


bottle_7 #1 回复
declare i int default 1; 你缺少了分号


java 执行存储过程 不等待执行完成_存储过程怎么执行_04


bottle_7 #3 · 2 月前


java 执行存储过程 不等待执行完成_存储过程怎么执行_07


luojie #2 回复
很抱歉,试过了,还是不行,不知道是不是那个很细的细节问题,后来我试着用最懒的方法复制老师的代码直接粘贴过去,居然还是不行,


java 执行存储过程 不等待执行完成_存储过程_11


java 执行存储过程 不等待执行完成_存储过程怎么执行_07


luojie #4 · 2 月前


java 执行存储过程 不等待执行完成_存储过程怎么执行_08


bottle_7 #3 回复
你把 #号 还有/**/ 这些注释都去掉。


java 执行存储过程 不等待执行完成_存储过程怎么执行_04


bottle_7 #5 · 2 月前


java 执行存储过程 不等待执行完成_存储过程怎么执行_07


luojie #4 回复
没用,太奇怪了,就那行加了分号就当行报错,不加就下一行报错?不着急吧,老师慢慢看
CREATE DEFINER=root@localhost PROCEDURE CrateTestData() BEGIN
declare i int default 1; while i < 10000 do insert into member values (null,CONCAT('test_',i),MD5(123456),13517793136+i,1,RAND()*10000,NOW()); set i = i +1; end while; END CALL crateTestData();

java 执行存储过程 不等待执行完成_存储过程_16