mysql快速生成批量测试数据
young / / mysql / 阅读量

创建数据库和表

DROP database IF EXISTS `test_yc`;
create database `test_yc`;
use `test_yc`;
set global log_bin_trust_function_creators=1;
DROP TABLE IF EXISTS `test_user`;
CREATE TABLE `test_user` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `user_id` varchar(20) NOT NULL DEFAULT '',
    `status` tinyint(2) unsigned NOT NULL DEFAULT '1',
    `create_time` datetime NOT NULL DEFAULT '1971-01-01 01:01:01',
    PRIMARY KEY (`id`),
    KEY `index_user_id` (`user_id`) USING HASH
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

创建生成长度为n的随机字符串的函数

DELIMITER // -- '//'
DROP FUNCTION IF EXISTS `rand_strings` //
SET NAMES utf8 //
CREATE FUNCTION `rand_strings` (n INT) RETURNS VARCHAR(255) CHARSET 'utf8'
BEGIN 
    DECLARE char_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    DECLARE return_str varchar(255) DEFAULT '';
    DECLARE i INT DEFAULT 0;
    WHILE i < n DO
        SET return_str = concat(return_str, substring(char_str, FLOOR(1 + RAND()*62), 1));
        SET i = i+1;
    END WHILE;
    RETURN return_str;
END //
DELIMITER ;

创建插入数据的存储过程

DELIMITER //
DROP PROCEDURE IF EXISTS `insert_test_user` //
CREATE PROCEDURE `insert_test_user`(IN n INT)
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE vote_num INT DEFAULT 0;
    DECLARE group_id INT DEFAULT 0;
    DECLARE status TINYINT DEFAULT 1;
    WHILE i < n DO
        SET status = FLOOR(1 + RAND()*2);
        INSERT INTO `test_user` VALUES (NULL, rand_strings(20),status, NOW());
        SET i = i + 1;
    END WHILE;
END //
DELIMITER ;  -- 改回默认的 MySQL delimiter:';'

调用存储过程生成10w数据

CALL insert_test_user(100000);

查询生成的数据

SELECT count(*) FROM `test_user`;
支付宝捐赠
请使用支付宝扫一扫进行捐赠
微信捐赠
请使用微信扫一扫进行赞赏
有 0 篇文章