日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

要實現插入百萬級隨機數據需要依賴MySQL的函數和存儲過程

下面先講講函數和存儲的區別:

標識符不同

函數必須要有返回值,而過程沒有返回值

過程無返回值類型,不能將結果直接賦值給變量;函數有返回值類型,調用時,除在select中,必須將返回值賦給變量

函數可以在select語句中直接使用,而過程不能,函數是使用select調用,過程使用call調用

一. 新建兩張表:

#員工表

create table emp(

id int unsigned primary key auto_increment,

ename varchar(20) not null default "",

age int not null default 18,

deptno mediumint unsigned not null default 0

)engine=innodb default charset=utf8mb4;

#部門表

create table dept(

id int unsigned primary key auto_increment,

deptno mediumint unsigned not null default 0,

dname varchar(20) not null default ""

)engine=innodb default charset=utf8mb4;

二. 編寫函數實現數據的隨機性:

#隨機字母函數

delimiter $$

create function rand_string(n int) returns varchar(255)

begin

declare chars_str varchar(100) default 'qwertyuiopasdfghjklzxvcbnm';

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()*26),1));

set i = i +1;

end while;

return return_str;

end $$

rand_string函數截取了n次chars_str的隨機位數上的一位字符,并使用concat函數拼接到return_str(floor用來向下取整)

#隨機數字函數

delimiter $$

create function rand_num() returns int(5)

begin

declare i int default 0;

set i = floor(rand()*10);

return i;

end $$

#隨機年齡函數

delimiter $$

create function rand_age() returns int(5)

begin

declare i int default 0;

set i = floor(18+rand()*23);

return i;

end $$

這兩個函數就不多贅述了

三.編寫存儲過程實現數據插入

#插入emp存儲過程

delimiter $$

create procedure insert_emp(in start int(10),in max_num int(10))

begin

declare i int default 0;

set autocommit = 0;

repeat

set i = i + 1;

insert into emp(empno,ename,age,deptno) values((start+i),rand_string(6),rand_age(),rand_num());

until i = max_num

end repeat;

commit;

end $$

根據傳入的start控制插入數據位置,max_num控制最大插入數據,插入時調用上面寫的隨機函數

#插入dept存儲過程

delimiter $$

create procedure insert_dept(in start int(10),in max_num int(10))

begin

declare i int default 0;

set autocommit = 0;

repeat

set i = i + 1;

insert into dept(deptno,dname) values((start+i),rand_string(10));

until i = max_num

end repeat;

commit;

end $$

定義了函數或存儲過程后記得deleimiter ; 把結束符改回 ;

接下來使用call [procedurename]調用存儲過程就ok了,測試插入了100條emp和10條dept數據,就不插入太多了,感興趣可以自己試試,下面是結果

Mysql手寫腳本實現插入百萬級隨機測試數據

結果1


Mysql手寫腳本實現插入百萬級隨機測試數據

結果2

原文鏈接:
https://blog.csdn.net/qq_42654484/article/details/99618000

分享到:
標簽:Mysql
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定