亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

要實(shí)現(xiàn)插入百萬(wàn)級(jí)隨機(jī)數(shù)據(jù)需要依賴MySQL的函數(shù)和存儲(chǔ)過(guò)程

下面先講講函數(shù)和存儲(chǔ)的區(qū)別:

標(biāo)識(shí)符不同

函數(shù)必須要有返回值,而過(guò)程沒(méi)有返回值

過(guò)程無(wú)返回值類型,不能將結(jié)果直接賦值給變量;函數(shù)有返回值類型,調(diào)用時(shí),除在select中,必須將返回值賦給變量

函數(shù)可以在select語(yǔ)句中直接使用,而過(guò)程不能,函數(shù)是使用select調(diào)用,過(guò)程使用call調(diào)用

一. 新建兩張表:

#員工表

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;

二. 編寫函數(shù)實(shí)現(xiàn)數(shù)據(jù)的隨機(jī)性:

#隨機(jī)字母函數(shù)

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函數(shù)截取了n次chars_str的隨機(jī)位數(shù)上的一位字符,并使用concat函數(shù)拼接到return_str(floor用來(lái)向下取整)

#隨機(jī)數(shù)字函數(shù)

delimiter $$

create function rand_num() returns int(5)

begin

declare i int default 0;

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

return i;

end $$

#隨機(jī)年齡函數(shù)

delimiter $$

create function rand_age() returns int(5)

begin

declare i int default 0;

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

return i;

end $$

這兩個(gè)函數(shù)就不多贅述了

三.編寫存儲(chǔ)過(guò)程實(shí)現(xiàn)數(shù)據(jù)插入

#插入emp存儲(chǔ)過(guò)程

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 $$

根據(jù)傳入的start控制插入數(shù)據(jù)位置,max_num控制最大插入數(shù)據(jù),插入時(shí)調(diào)用上面寫的隨機(jī)函數(shù)

#插入dept存儲(chǔ)過(guò)程

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 $$

定義了函數(shù)或存儲(chǔ)過(guò)程后記得deleimiter ; 把結(jié)束符改回 ;

接下來(lái)使用call [procedurename]調(diào)用存儲(chǔ)過(guò)程就ok了,測(cè)試插入了100條emp和10條dept數(shù)據(jù),就不插入太多了,感興趣可以自己試試,下面是結(jié)果

Mysql手寫腳本實(shí)現(xiàn)插入百萬(wàn)級(jí)隨機(jī)測(cè)試數(shù)據(jù)

結(jié)果1


Mysql手寫腳本實(shí)現(xiàn)插入百萬(wàn)級(jí)隨機(jī)測(cè)試數(shù)據(jù)

結(jié)果2

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

分享到:
標(biāo)簽:Mysql
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定