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

2021-08-25 11:28:06 字數 3356 閱讀 2515

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

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

create table dept(

id int unsigned primary key auto_increment,

deptno mediumint unsigned not null default 0,

dname varchar(20) not null default "",

loc varchar(13) not null default ""

)engine=innodb default charset=utf8;

create table emp(

id int unsigned primary key auto_increment,

empno mediumint unsigned not null default 0,/*編號*/

ename varchar(20) not null default "",/*姓名*/

job varchar(9) not null default "",/*工作*/

mgr mediumint unsigned not null default 0,/*上級編號*/

hiredate date not null,/*入職時間*/

sal decimal(7,2) not null, /*薪水*/

comm decimal(7,2) not null,/*紅利*/

deptno mediumint unsigned not null default 0/*部門編號*/

)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 default 0;

while i

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

delimiter $$

create function rand_num() returns int(5)

begin

declare i int default 0;

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

return i;

end $$

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

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

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

delimiter $$

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

begin

declare i int default 0;

/*把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 default 0;

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 keyauto incremen...

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