寫這邊文章的目的,是想結合mysql 儲存過程+函式完成乙個批量刪除的功能吧...正好也好加深下對procedure和function的熟練操作吧...
廢話不多說,我就直接上表結構啦哈,如下:
create執行以下命令檢視mysql版本是否開啟了函式功能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;
執行後再看是否生效
建立函式(作用:生產隨機字串)
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 $$2:建立往dept表中插入資料的儲存過程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 $$
delimiter $$可以檢視已經建立的procedure: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 $$
上面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...