mysql存储过程,生成测试数据

来源:互联网 发布:vscode 酷炫插件 编辑:程序博客网 时间:2024/05/21 12:44

指定要插入数据的表,如 tb_info表
创建内存表,可以增加插入效率>create tb_info_memory(..);

DELIMITER // -- 修改MySQL delimiter:'//'DROP PROCEDURE IF EXISTS `add_data` //CREATE PROCEDURE `add_data`(IN n INT)BEGIN    DECLARE i INT DEFAULT 1;    WHILE i < n DO        --这里想内存表插入数据        --如:INSERT INTO `tb_info_memory`(`book_id`,..)values(...);        SET i = i + 1;    END WHILE;END //DELIMITER ;  -- 改回默认的 MySQL delimiter:';'

调用存储过程call add_data(1000);这里生成1000条数据
将数据表插入实际表中

INSERT INTO `tb_info`(`book_id`,    ..)select * from tb_info_memory;
DELIMITER //drop procedure if exists add_data //create procedure add_data(in n int ,out s longtext)begin    declare i int(6) default 1;    declare v_sql longtext;    set v_sql = concat('INSERT INTO `bookdb`.`t`(`id`,`name`)VALUES(',floor(rand()*100),',','''',rand_string(5),'''',')');    while i<n DO         set v_sql = concat(v_sql,',(',floor(rand()*100),',','''',rand_string(5),'''',')');        set i=i+1;    END while;    set @s_sql = concat(v_sql);    set s = @s_sql;    prepare stmt from @s_sql;    execute stmt;    deallocate prepare stmt;endDELIMITER ;--插入并显示sqlcall add_data(30000,@sql_str);select @sql_str;