mysql自定义函数并在存储过程中调用,生成一千万条数据

时间:2023-03-09 17:43:28
mysql自定义函数并在存储过程中调用,生成一千万条数据

mysql 自定义函数,生成 n 个字符长度的随机字符串

-- sql function

delimiter $$
create function rand_str(n int) returns VARCHAR(255)
BEGIN declare str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSQUVWXYZ';
declare i int DEFAULT 0;
declare res_str VARCHAR(255) default ''; while i < n do
set res_str = concat(res_str,substr(str,FLOOR(rand()*52+1),1));
set i = i + 1;
end while;
return res_str; end$$
delimiter ;

写好之后,运行一下,运行成功后,可以在函数下看到刚刚自定义的函数

mysql自定义函数并在存储过程中调用,生成一千万条数据

然后,调用一下

SELECT rand_str(3);  -- 生成3个字符的随机字母

mysql自定义函数并在存储过程中调用,生成一千万条数据

写一个存储过程,

实现功能:insert_emp2(2,10) 从2开始,插入10条数据

delimiter $$
create procedure insert_emp2(in startNum int ,in max_num int)
BEGIN
-- 声明一个变量记录当前是第几条
declare i int DEFAULT 0; -- 默认情况下是自动提交sql
set autocommit = 0; -- 禁止自动提交sql -- 循环
repeat set i = i + 1;
-- 插入数据 id 增加, name 随机,年龄随机
insert into emp2 values (startNum + i,rand_str(5),floor(10+rand()*30)); until i = max_num
end repeat ; commit; -- 待循环完毕后再进行提交,即整体提交整体的 sql,这样可以提高效率,否则循环里会一次一次的去提交sql,数据多了会很慢。 end$$
delimiter$$

然后,调用 存储过程:

call insert_emp2(100,10000000);  --插入一千万条数据进去

等几分钟

。。。。

好久啊

这么久来 还没创建好

我的天呐

。。。。。

hello

我去

后悔了,一千万有点太多了