欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql利用存储过程批量创建表,插入数据

程序员文章站 2024-03-19 18:35:52
...

背景:

在特定场景测试中时,需要构造10000张表,每张表中1000条数据。

创建库:

存储过程是基于数据库的,首先创建一个测试库
drop database if exists performanceTest;
create database performanceTest charset utf8;
use performanceTest;

创建存储过程:

在交互式shell中,分号本身代表语句结束,但是存储过程本身带有分号,因此需要先更改结束符号为//

DELIMITER //;

新建表的存储过程,num代表需要创建表的数量

create procedure quickAddTb(IN num INTEGER)
begin
declare var int;
declare tableName varchar(32);
set var=0;
while var<num do
set tableName=concat('test',var);
set @STMT:=concat('create table ',tableName,'(
id int auto_increment key,
ipAddr varchar(32),
email varchar(32));');
PREPARE STMT FROM @STMT;
EXECUTE STMT;
set var=var+1;
end while;
end;//

插入表数据的存储过程,tbnum代表表数量,tbrow代表表行数

create procedure insertData(IN tbnum INTEGER, tbrow INTEGER)
begin
declare var int;
declare row int;
declare tableName varchar(32);
set var=0;
while var<tbnum do
set tableName=concat('test',var);
set row=0;
while row<tbrow do
set @INS:=concat('insert into ',tableName,' values(null,''192.168.18.12'',''aaa@qq.com'');');
select @INS;
PREPARE INS FROM @INS;
EXECUTE INS;
set row=row+1;
end while;
set var=var+1;
end while;
end;

查询存储过程

select * from mysql.proc;

删除存储过程

drop procedure performanceTest.quickAddTb; drop procedure
performanceTest.insertData;

执行存储过程

call performanceTest.quickAddTb(10000);
call performanceTest.insertData(10000,1000);

mysql利用存储过程批量创建表,插入数据

相关标签: mysql 数据库