mysq之快速批量的插入生成数据
mysq之快速批量的插入生成数据
- 1.insert inot select
- 2.存储过程
- 3.借助工具
在日常测试工作时,有时候需要某张表有大量的数据,如:需要有几百个系统中的用户账号等情况;因此,记录整理,如何快速的在表中插入生成大量数据;
1.insert inot select
将查询出来的表字段值插入到另一张表中,可以进行条件筛选只插入满足条件的数据,勉强能达到批量生成数据的效果,但不灵活,且需要有源数据,不是很理想的方法;
语法:
insert into table_name select * from table_name
where 条件
或
insert into table_name(列名1,...,列名n) select (列名1,...,列名n) from table_name
where 条件
示例:test_menu整表内容插入到test_menubak
insert into test_menubak
select * from test_menu;
示例:test_menu表id<=时的内容,指定字段,插入到test_menubak
insert into test_menubak2(menu_id,menu_name,parent_id,path)
select menu_id,menu_name,parent_id,path from test_menu
where menu_id <=10;
2.存储过程
定义存储过程,传递参数循环控制插入表数据中的内容,灵活,可以根据需要灵活配置插入的内容,但是需要编写sql脚本稍微麻烦一点点;
语法:这里只介绍了基本的语法
create procedure pro_name(类型 参数名 参数类型(长度),...,类型 参数名n 参数类型(长度))
begin
-- 存储过程体
end;
类型:可分为 in、out、inout
in:输入参数,向存储过程中传递值;
out:输出参数,从存储过程中获取值;
inout:输入输出参数,即可以传递、也可以获取;
如:in test int (10)
declare
定义变量:
格式:declare 变量名 类型;
set
赋值:
格式:set 变量名 = 值;
concat
变量字符串拼接:
格式:concat('字符串',变量名);
while
循环语法:
while 条件 do-- 循环体
end while;
if
判断:
if 条件 -- 语句块
end if;
调用存储过程:
格式:call 存储过程名(参数1,...,参数n);
示例:输入开始和结束参数,批量插入数据:
delimiter //
-- 检测对应的存储过程是否存在,存在则删除;
drop procedure if exists moreInsert;-- 定义带两参数startNum、maxtNum的存储过程;
create procedure moreInsert(in startNum int(10),in maxtNum int(10))
begin
-- 定义计数器变量currNum;declare currNum int;set currNum = startNum;-- 开始事务start transaction;-- 计数器小于最大值maxtNum时,进入循环;while currNum <=maxtNum do-- 插入数据语句;insert ignore into 会跳过重复的主键;insert ignore into test_user(user_id,dept_id,user_name,nick_name)-- 数据使用变量、将字符串和变量拼接;values(currNum,15,concat('test_',currNum),concat('测试账号_',currNum));-- 每次插入完成计数器加1;set currNum = currNum + 1;end while;-- 提交commit;
end //
调用存储过程:
call moreInsert(5,16);
3.借助工具
可以借助工具,如:nacicat,可以利用它里面的数据生产,对指定表中生成指定数量的数据,可对表的每个字段值进行设置,生成随机的值、枚举值等
优点:简单快速,上手容易;
如图:
入口:
配置字段值: