不败君

前端萌新&初级后端攻城狮

使用 Mysql 存储过程生成5万条数据记录

使用 Mysql 存储过程生成5万条数据记录

2020-07-09 18:12:00

围观(2327)

本文的操作均使用 HeidiSQL.


首先创建一个数据库, 例如取名为 so_cool, 再创建一个 test 表, 表只需要两个字段 id, name(需要更多字段另外加上就好):

CREATE TABLE `test` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(64) NOT NULL DEFAULT '0' COLLATE 'utf8_unicode_ci',
    PRIMARY KEY (`id`) USING BTREE
)
COLLATE='utf8_unicode_ci'
ENGINE=MyISAM
;

数据库引擎也通过上面代码, 或者使用 HeidiSQL 去设置/更改.


在这个库里面创建一个存储过程(直接在 HeidiSQL 执行下面代码的查询):

DELIMITER $$
CREATE PROCEDURE create_data(IN total INTEGER, IN tb_name VARCHAR(64))
BEGIN
    DECLARE str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    DECLARE this_str VARCHAR(64) DEFAULT '';
    DECLARE i int;
    set i=1;
    while i<=total DO
        SET this_str = substring(str, FLOOR(1 + RAND()*62));
        set @stmt = CONCAT('INSERT INTO ',tb_name,' (NAME) VALUES("',this_str,'");'); 
        PREPARE stmt_str FROM @stmt;
        EXECUTE stmt_str;
        DEALLOCATE PREPARE stmt_str;
        SET i = i + 1;
    end while;
END$$
DELIMITER ;

运行查询后, 在数据库就会有这个创建数据的存储过程:

1.png


进入到这个存储过程, 点击运行过程:

2.png

在弹出的 参数"total" 输入想要生成的数据记录数量, 参数 "tb_name" 输入 test (本文最开始创建的数据库) 或其他数据表.


博主尝试了创建 50 万条数据记录, 但是速度太慢了没耐心等结果. 所以本文仅仅测试生成了 5 万条记录.

5 万条记录的耗时是 5 分钟左右.


感觉速度比博主之前写的这篇文章的方法还慢: 使用 Laravel 填充一百万假数据

本文地址 : bubaijun.com/page.php?id=195

版权声明 : 未经允许禁止转载!

评论:我要评论
发布评论:
Copyright © 不败君 粤ICP备18102917号-1

不败君

首 页 作 品 微 语