MySQL儲存過程

2021-10-06 22:52:59 字數 3308 閱讀 2558

原文 :

還可參考

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

寫這邊文章的目的,是想結合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儲存過程

在本節中,您將逐步學習如何在mysql中編寫和開發儲存過程。首先,我們向您介紹儲存過程的概念,並討論何時使用它。然後,展示如何使用過程 的基本元素,如建立儲存過程的語句,if else,case,loop,儲存過程的引數。下面每個教程都包含了易於理解的示例和詳細的說明。如果您瀏覽並學習所有教程,您可...

mysql 儲存過程 mysql 儲存過程

建立 為建立儲存過程的結束標誌,使用delimiter 可更改標誌 格式create procedure begin sqlend create procedure myprocedure in param integer begin select from tb role where tb rol...

mysql 儲存過程 MySQL儲存過程

目錄 儲存過程 簡介是一組為了完成特定功能的sql語句集合 比傳統sql速度更快 執行效率更高 儲存過程的優點 執行一次後,會將生成的二進位制 駐留緩衝區,提高執行效率 sql語句加上控制語句的集合,靈活性高 在伺服器端儲存,客戶端呼叫時,降低網路負載 可多次重複被呼叫,可隨時修改,不影響客戶端呼叫...