03
2016
11

mysql快速创建百万级测试数据

#1.新建测试表
CREATE TABLE `tmp` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(100) NOT NULL,
  `content` text NOT NULL,
  `time` datetime NOT NULL,
  `sort` int(3) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=102 DEFAULT CHARSET=utf8;

#2.随机数生成函数创建
set global log_bin_trust_function_creators = 1;  #1418错误解决
DROP FUNCTION IF EXISTS rand_string;
DELIMITER $$
CREATE FUNCTION rand_string(n INT)
RETURNS VARCHAR(255)
BEGIN
    DECLARE chars_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(chars_str , FLOOR(1 + RAND()*62 ),1));
        SET i = i +1;
    END WHILE;
    RETURN return_str;
END $$
DELIMITER ;

#3.生出储存过程创建
CREATE PROCEDURE `insert_emp`(IN star INT (10), IN max_num INT (10))
BEGIN
	DECLARE
		i INT DEFAULT 0;
		SET autocommit = 0;#默认不提交sql 
		REPEAT
		SET i = i + 1;
		INSERT INTO tmp
		VALUES
			(
				(star + i),
				rand_string (10),
				rand_string (500),
				NOW(),
				FLOOR(RAND() * 1000)
			);
		UNTIL i = max_num
		END
		REPEAT;
		COMMIT;#整体提交所有sql
END;

#4.调用存储过程
call insert_emp(1,10000);


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。