1、提高**的重用
2、簡化操作
3、減少編譯次數
4、減少了與資料庫伺服器的連線次數
一般情況下,用於資料庫的增刪改
create procedure 儲存過程名(引數列表)
begin
儲存過程體(合法有效的sql語句)
end
1、引數列表 包含3個部分 引數模式 引數名 引數型別 (in username varchar(20))
引數模式
in 表示該引數作為輸入,該引數呼叫的時候傳入值
out 該引數作為輸出,就是返回值
inout 既可以當作輸入,又可以當作輸出,表示的需要傳入,也可以輸出
2、begin end ,如果儲存過程只有一條語句,可以省略
3、關於結束符
儲存過程體的每一條sql語句都需要是合法有效的,一定要加;
儲存過程的結尾需要重新宣告結束符
delimiter 結束符
4、呼叫的時候,需要call 儲存過程名()
# 向品牌表輸入資料
delimiter $
create procedure p1()
begin
insert into brand(brandname)
value('a'),('b'),('c')
end$
select * from brand;
call p1();
# 根據傳入的品牌id,查詢品牌和商品
delimiter $
create procedure p2(in brandid int)
begin
select goods.name.brand.brandname
from goods inner join brand
on goods.brand_id=brand.id
where goods.brand_id=brandid;
end$
call p2(1);
delimiter $
create procedure p3(in username varchar(20),in gender char,in phone varchar(11),in address int)
begin
insert into users values(0,username,gender,phone,default,address);
end$
desc users;
call p3('張三','男','13111111111',1);
select * from users;
注意:varchar 要加(長度) 不然會出錯
# 根據傳入的商品id,返回商品的名字
delimiter $
create procedure newp6(in goodsid int,out goodsname varchar(20))
begin
select goods.`name` into goodsname from goods where goods.`id`=goodsid;
end$
set @gname='';
select @gname;
call newp6(1,@gname);
# 根據傳入的商品id,輸出品牌id和商品名
delimiter $
create procedure newp7(in goodsid int,out goodsname varchar(20),out brandid int)
begin
select goods.`name`,goods.`brande_id` into goodsname,brandid from goods where goods.`id`=goodsid;
end$
call newp7(1,@gname,@bid);
select @gname;
select @bid;
# 傳入兩個資料,將資料翻倍輸出
delimiter $
create procedure newp8(inout a int,inout b int)
begin
set a = a*2;
set b = b*2;
end$
set @m=1;
set @n=2;
select @m;
select @n;
call newp8(@m,@n);
練習:
# 1、建立儲存過程輸入使用者名稱或者密碼,插入到使用者表
delimiter $
create procedure p1(in uname varchar(20),in upwd varchar(20))
begin
insert into account values(0,uname,upwd);
end $
call p1('bull','cow');
select * from account;
# 2、建立儲存過程,傳入分類的名字,返回該品種下面所有的商品資訊
delimiter $
create procedure p2(in classname varchar(20))
begin
select goods.* from goods inner join cate on goods.cate_id=cate.id where cate.name=classname;
end $
call p2('服裝1');
# 3、實現儲存過程實現傳入兩個商品的**,返回**高的那個
delimiter $
create procedure p3(in price1 decimal(8,2),in price2 decimal(8,2),out higher decimal(8,2))
begin
select if(price1>price2,price1,price2) into higher;
end $
set @hr='';
call p3(500,129,@hr);
select @hr;
# 4、建立儲存過程,傳入乙個時間,格式化成年月日
delimiter $
create procedure p4(inout t date)
begin
set t= date_format(t,'%y-%m-%d');
end $
set @t=20200913;
call p4(@t);
select @t;
drop procedure 過程名; # 刪除
desc 過程名; # 錯誤
show create procedure 過程名; # 檢視
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語句加上控制語句的集合,靈活性高 在伺服器端儲存,客戶端呼叫時,降低網路負載 可多次重複被呼叫,可隨時修改,不影響客戶端呼叫...