在一起的語言,叫做'過程'
php中沒有過程,只有函式, 準確的說.函式能起到過程的作用
"過程"就是封裝語句,呼叫的時候,這些封裝體執行
函式是有返回值的過程,而過程沒有返回值的函式
過程 --- 把若干條sql封裝起來, 起個名字就是過程
儲存過程 --- 把此過程存在資料庫中, 叫做儲存過程
匿名過程 --- mysql 不支援
語法:
# 建立:
create procedure procedurename()
begin
-- sql 語句
end $
# 檢視:
show procedure status \g$
# 呼叫:
call procedurename();
--- 儲存過程是可以程式設計的,可以用表示式 控制結構等 完成複雜的功能
-
在儲存過程中,用 declare 宣告變數
-格式 declare 變數名 型別 [default預設值]
建立:
create procedure p2()
begin
declare age int default 18;
declare height int default 180;
select concat('年齡是',age,'身高是',height);
end $
----------------------------------------------
mysql> call p2()$
+--------------------------------------+
| concat('年齡是',age,'身高是',height) |
+--------------------------------------+
| 年齡是18身高是180 |
+--------------------------------------+
----------------------------------------------
運算:
- 變數可以做sql語句中合法的運算,如 + - * /
- 怎麼賦值給變數?
-- set 變數名 := x+x
create procedure p3()
begin
declare age int default 18;
declare height int default 180;
set age := age+20;
select concat('年齡是',age,'身高是',height);
select concat('20年後年齡是',age);
end $
----------------------------------------------
mysql> call p3()$
+--------------------------------------+
| concat('年齡是',age,'身高是',height) |
+--------------------------------------+
| 年齡是38身高是180 |
+--------------------------------------+
1 row in set (0.00 sec)
+----------------------------+
| concat('20年後年齡是',age) |
+----------------------------+
| 20年後年齡是38 |
+----------------------------+
1 row in set (0.01 sec)
----------------------------------------------
控制:
-- if/else 控制結構
/* if conditon then
statement
else
xxoo
end ;
*/create procedure p4()
begin
declare age int default 18;
if age >= 18 then
select '已成年';
else
select '未成年';
end if;
end $
----------------------------------------------
mysql> call p4()$
+--------+
| 已成年 |
+--------+
| 已成年 |
+--------+
----------------------------------------------
輸送引數:
/*
儲存過程的括號裡,可以宣告引數,
語法 [in/out/inout] 引數名 引數型別
*/ create procedure p5(width int ,height int)
begin
select concat('面積是:',width*height);
if width > height then
select '胖';
elseif width < height then
select '瘦';
else
select '方';
end if;
end $
----------------------------------------------
mysql> call p5(1,1)$
+---------------------------------+
| concat('面積是:',width*height) |
+---------------------------------+
| 面積是:1 |
+---------------------------------+
1 row in set (0.00 sec)
+----+
| 方 |
+----+
| 方 |
+----+
1 row in set (0.01 sec)
----------------------------------------------
mysql> call p5(4,5)$
+---------------------------------+
| concat('面積是:',width*height) |
+---------------------------------+
| 面積是:20 |
+---------------------------------+
1 row in set (0.00 sec)
+----+
| 瘦 |
+----+
| 瘦 |
+----+
1 row in set (0.01 sec)
----------------------------------------------
mysql> call p5(6,5)$
+---------------------------------+
| concat('面積是:',width*height) |
+---------------------------------+
| 面積是:30 |
+---------------------------------+
1 row in set (0.00 sec)
+----+
| 胖 |
+----+
| 胖 |
+----+
1 row in set (0.01 sec)
----------------------------------------------
更複雜的~......
更實用的~......
未完~
Mysql 儲存過程1
儲存過程的優勢 1,一般的sql命令在執行前需要解析 編譯前提準備過程,但是儲存 過程是事先完成了解析,編譯處理後儲存在資料庫的,執行時能減輕 資料庫負擔,提高執行效能。2,減輕網路負擔,之前的傳遞sql語句,變成現在的傳遞引數。3,防止對錶的直接訪問。4,可以減少大部分的程式 5,msyql5.0...
mysql儲存過程(1)
1 in引數的理解 delimiter cre atep roce dure sele ctus er1 inus erid int begi nsel ect from tuse rwhe reid us erid end create procedure selectuser1 in useri...
MySQL儲存過程 (1)
引數模式 in 該引數作為輸入,該引數呼叫傳入值 out 該引數作為輸出,該引數作為返回值 inout 該引數即可作為輸入,也可作為輸出,該引數即可呼叫傳入值,也可作為返回值 delimiter 設定結束標記,比如 delimiter 1 不帶引數儲存過程 delimiter create proc...