mysql使用儲存過程 函式實現批量插入

2021-09-07 14:10:39 字數 3996 閱讀 5222

寫這邊文章的目的,是想結合mysql 儲存過程+函式完成乙個批量刪除的功能吧...正好也好加深下對procedure和function的熟練操作吧...

廢話不多說,我就直接上表結構啦哈,如下:

create

table

dept(

id int unsigned primary

keyauto_increment,

deptno mediumint unsigned

notnull

default0,

dname

varchar(20) not

null

default

"", loc

varchar(13) not

null

default

"")engine

=innodb default charset=

utf8;

create

table

emp(

id int unsigned primary

keyauto_increment,

empno mediumint unsigned

notnull

default

0,/*

編號*/

ename

varchar(20) not

null

default "",/*

姓名*/

job

varchar(9) not

null

default "",/*

工作*/

mgr mediumint unsigned

notnull

default

0,/*

上級編號

*/hiredate date

notnull,/*

入職時間

*/sal

decimal(7,2) not

null, /*

薪水*/

comm

decimal(7,2) not

null,/*

紅利*/

deptno mediumint unsigned

notnull

default0/*

部門編號

*/)engine

=innodb default charset=utf8;

執行以下命令檢視mysql版本是否開啟了函式功能

執行後再看是否生效

建立函式(作用:生產隨機字串)

delimiter $$

create

function rand_string(n int) returns

varchar(255)

begin

declare chars_str varchar(100) default

'qwertyuiopasdfghjklzxcvbnm';

declare return_str varchar(255) default'';

declare i int

default0;

while i<

n do

set return_str=concat(return_str,substring(chars_str,floor(1

+rand()*

52),1

));

set i=i+1;

endwhile

;

return

return_str;

end $$

建立函式(作用:隨機生產部門編號)

delimiter $$

create

function rand_num() returns

int(5)

begin

declare i int

default0;

set i=

floor(100

+rand()*

10);

returni;

end $$

建立完後我們可以檢視建立的函式:

接著我們來建立儲存過程:

1:建立往emp表中插入資料的儲存過程

delimiter $$

create

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

))begin

declare i int

default0;

/*把autocommit設定成0

*/set autocommit=0;

repeat

set i=i+1;

insert

into

emp(empno,ename,job,mgr,hiredate,sal,comm,deptno)

values((start+i),rand_string(6),'

salesman

',0001,curdate(),2000,400

,rand_num());

until i

=max_num end

repeat;

commit

;end $$

2:建立往dept表中插入資料的儲存過程

delimiter $$

create

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

))begin

declare i int

default0;

set autocommit=0;

repeat

set i=i+1;

insert

into dept(deptno,dname,loc) values((start+i),rand_string(10),rand_string(8

)); until i

=max_num end

repeat;

commit;

end $$

可以檢視已經建立的procedure:

上面2個show create procedure請分開執行,我這裡直截屏就只顯示乙個procedure啦

那我們可以開始呼叫儲存過程了

call insert_dept(1,100);//從deptno為1起插入100條隨機生成資料
執行後我的部分資料如下:

call insert_emp(1001,50000);//從empno為1001起插入50000條隨機生成資料
執行後部分截圖如下:

至此,整個批量插入完成...關於儲存過程和函式,手冊上有更詳細的介紹啦,我這裡就不再贅述了吧....

mysql使用儲存過程 函式實現批量插入

寫這邊文章的目的,是想結合mysql 儲存過程 函式完成乙個批量刪除的功能吧.正好也好加深下對procedure和function的熟練操作吧.廢話不多說,我就直接上表結構啦哈,如下 create table dept id int unsigned primary key auto increme...

mysql 函式 儲存過程

set global log bin trust function creators 1 1.函式func splitstringtotal 將字串按指定方式分割,並計算單元總數 drop function if exists func get splitstringtotal create fun...

mysql儲存過程和函式使用例項

1.需求 根據輸入的年份,月份,和當前系統的年份比較,不滿1年按1年計算,多出1年11個月也按1年計算。2.計算得出來的使用年份,計算車輛殘值。3.儲存過程 delimiter use dbtest drop procedure ifexists sp calc year create proced...