往身份信息表插入N条记录,N=P*Q, p:每条insert语句插入的记录数,由临时表的数量决定 q:循环次数,存储过程的入参

-- 身份信息表 drop table if exists t_identity_info; create table t_identity_info ( id int(11) not null auto_increment comment '主键id', real_name varchar(20) default null comment '姓名', id_card varchar(18) not null comment '×××号', create_time varchar(19) not null comment '创建时间', primary key (id), key index_id_card (id_card) ) engine=innodb auto_increment=1 default charset=utf8 comment='用户信息表';

-- 删除 drop function if EXISTS rand_xing_ming ;

-- 创建函数 create function rand_xing_ming() returns varchar(20) begin declare xing_string varchar(1000) default '赵钱孙李周吴郑王冯陈'; declare ming_string varchar(1000) default '天地玄黄宇宙洪荒日月'; declare xing_ming varchar(20) default '' ;

declare xing_index int; declare ming_index int; declare temp_xing varchar(10); declare temp_ming varchar(10);

set xing_index = round(rand()*10000) mod (char_length(xing_string)-1); set ming_index = (round(rand()*10000)) mod (char_length(ming_string)-1); set temp_xing = substring(xing_string,xing_index,1); set temp_ming = substring(ming_string,ming_index,1); set xing_ming = concat(temp_xing,temp_ming); return xing_ming; end ;

-- 测试 select rand_xing_ming();

-- 临时表,用来控制insert的条数 drop table if exists t_temp; create table t_temp ( id int(11) not null auto_increment comment '主键id', primary key (id) ) engine=innodb auto_increment=1 default charset=utf8 comment='临时表';

-- 插入100条数据 insert into t_temp values (),(),(),(),(),(),(),(),(),(), (),(),(),(),(),(),(),(),(),(), (),(),(),(),(),(),(),(),(),(), (),(),(),(),(),(),(),(),(),(), (),(),(),(),(),(),(),(),(),(), (),(),(),(),(),(),(),(),(),(), (),(),(),(),(),(),(),(),(),(), (),(),(),(),(),(),(),(),(),(), (),(),(),(),(),(),(),(),(),(), (),(),(),(),(),(),(),(),(),();

-- 存储过程 drop procedure if exists insert_data;

delimiter ;; create procedure insert_data(IN data_count int) begin declare i int; set i = 0; while i < data_count do set i = i +1;

insert into t_identity_info (real_name,id_card,create_time) select rand_xing_ming(),'abc',now() from t_temp ;

end while; end ;; DELIMITER ;

-- 调用存储过程 插入10W条记录 set autocommit= 0; call insert_data(1000); commit;

-- 验证 select count(1) from t_identity_info;