您的位置:首页 > 数据库 > MySQL

MYSQL批量插入千万级数据只需百秒

2017-02-23 21:45 106 查看
1.首先创建一张student表

create table(id int(20)
NOT NULL AUTO_INCREMENT,sex char(1),name varchar(20));

2.创建两个随机函数,用来生成用户名和性别

#随机生成name

delimiter $$

CREATE FUNCTION rand_name(n INT)

RETURNS VARCHAR(20)

BEGIN

DECLARE chars_str varchar(100) DEFAULT 

'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

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));#52代表在52个字母中随即找出一个

SET i = i +1;

END WHILE;

RETURN return_str;

END

$$

#随机生成性别

delimiter $$

CREATE FUNCTION rand_sex(n INT)

RETURNS VARCHAR(20)

BEGIN

DECLARE chars_str varchar(100) DEFAULT '01';

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()*2 ),1));
SET i = i +1;

END WHILE;

RETURN return_str;

END

$$

3.写存储过程,思路是首先生成数据,然后一起commit

delimiter $$

CREATE PROCEDURE insertData()

begin

set @a=1;     #学号

SET autocommit=0;

while @a<100000000 do     #如果@a<2000010001则返回true,继续执行
 #如果@a<2000010001则返回true,继续执行
set @b=rand_name(5);     #姓名,随即赋值,值为5位a-zA-Z的任意组合
set @c=rand_sex(1);           #性别,随即赋值,值为1位,0或者1
insert into student(name,sex) values(@b,@c);
set @a=@a+1;
end while;

COMMIT;

End

$$
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 函数 数据