我是靠谱客的博主 淡定眼神,最近开发中收集的这篇文章主要介绍如何在mysql插入50万条测试数据:利用存储过程SQL编程实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

    • 1. 首先创建两张测试表
    • 2.为function指定一个参数
    • 3. 创建函数:随机产生字符串
    • 4. 创建函数:用于随机产生多少到多少的编号
    • 5. 创建存储过程:往emp表中插入数据
    • 6. 创建存储过程,往dept表添加随机数据
    • 7. 执行存储过程,往dept表添加1万条数据,往emp表添加50万条数据
    • 8. 查看结果

1. 首先创建两张测试表

 CREATE TABLE `dept` (
 `id` INT(11) NOT NULL AUTO_INCREMENT,
 `deptName` VARCHAR(30) DEFAULT NULL,
 `address` VARCHAR(40) DEFAULT NULL,
 ceo INT NULL ,
 PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
 
CREATE TABLE `emp` (
 `id` INT(11) NOT NULL AUTO_INCREMENT,
 `empno` INT NOT NULL ,
 `name` VARCHAR(20) DEFAULT NULL,
 `age` INT(3) DEFAULT NULL,
 `deptId` INT(11) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

2.为function指定一个参数

 # 由于开启过慢查询日志,因为我们开启了 bin-log, 我们就必须为我们的function指定一个参数。
show variables like 'log_bin_trust_function_creators';
# 这样添加了参数以后,如果mysqld重启,上述参数又会消失,永久方法
set global log_bin_trust_function_creators=1;

3. 创建函数:随机产生字符串

DELIMITER $$
CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255)
BEGIN    
	DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';
	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()*52),1));  
		SET i = i + 1;
	END WHILE;
	RETURN return_str;
END $$
#假如要删除
#drop function rand_string;

4. 创建函数:用于随机产生多少到多少的编号

DELIMITER $$
CREATE FUNCTION  rand_num (from_num INT ,to_num INT) RETURNS INT(11)
BEGIN   
 DECLARE i INT DEFAULT 0;  
 SET i = FLOOR(from_num +RAND()*(to_num -from_num+1))   ;
 RETURN i;  
END$$ 
 
#假如要删除
#drop function rand_num;

5. 创建存储过程:往emp表中插入数据

DELIMITER $$
CREATE PROCEDURE  insert_emp(  START INT ,  max_num INT )
BEGIN  
	DECLARE i INT DEFAULT 0;   
	#set autocommit =0 把autocommit设置成0  
	 SET autocommit = 0;    
	 REPEAT  
		 SET i = i + 1;  
		 INSERT INTO emp (empno, NAME ,age ,deptid ) VALUES ((START+i) ,rand_string(6)   , rand_num(30,50),rand_num(1,10000));  
		 UNTIL i = max_num  
	 END REPEAT;  
	 COMMIT;  
END$$ 
#删除
# DELIMITER ;
# drop PROCEDURE insert_emp;

6. 创建存储过程,往dept表添加随机数据

DELIMITER $$
CREATE PROCEDURE `insert_dept`(  max_num INT )
BEGIN  
	 DECLARE i INT DEFAULT 0;   
	 SET autocommit = 0;    
	 REPEAT  
		 SET i = i + 1;  
		 INSERT INTO dept ( deptname,address,ceo ) VALUES (rand_string(8),rand_string(10),rand_num(1,500000));  
		 UNTIL i = max_num  
	 END REPEAT;  
	 COMMIT;  
END$$
 
#删除
# DELIMITER ;
# drop PROCEDURE insert_dept;

7. 执行存储过程,往dept表添加1万条数据,往emp表添加50万条数据

两个执行过程可能有些常,不要着急,耐心等待:我创建的时候10000条数据大概用了49秒,500000条数据大概用了157秒

# 执行存储过程,往dept表添加1万条数据
DELIMITER ;
CALL insert_dept(10000); 

# 执行存储过程,往emp表添加50万条数据
CALL insert_emp(100000,500000); 

8. 查看结果

下面函数中,Fx为我们创建的函数,Px为我们创建的存储过程
在这里插入图片描述

SELECT COUNT(*) FROM dept
SELECT COUNT(*) FROM emp

dept中数据为10000
在这里插入图片描述
emp中数据为500000
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最后

以上就是淡定眼神为你收集整理的如何在mysql插入50万条测试数据:利用存储过程SQL编程实现的全部内容,希望文章能够帮你解决如何在mysql插入50万条测试数据:利用存储过程SQL编程实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部