mysql 儲存過程是從 mysql 5.0 開始增加的新功能。儲存過程的優點有一籮筐。不過最主要的還是執行效率和sql **封裝。特別是 sql **封裝功能,如果沒有儲存過程,在外部程式訪問資料庫時(例如 php),要組織很多 sql 語句。特別是業務邏輯複雜的時候,一大堆的 sql 和條件夾雜在 php **中,讓人不寒而慄。現在有了 mysql 儲存過程,業務邏輯可以封裝儲存過程中,這樣不僅容易維護,而且執行效率也高。
一、mysql 建立儲存過程
「pr_add」 是個簡單的 mysql 儲存過程,這個儲存過程有兩個 int 型別的輸入引數 「a」、「b」,返回這兩個引數的和。
drop procedure if exists pr_add;
-- 計算兩個數之和
create procedure pr_add
(a int,
b int
)begin
declare c int;
if a is null then
set a = 0;
end if;
if b is null then
set b = 0;
end if;
set c = a + b;
select c as sum;
/*return c;- 不能在 mysql 儲存過程中使用。return 只能出現在函式中。
/end;
二、呼叫 mysql 儲存過程
call pr_add(10, 20);
執行 mysql 儲存過程,儲存過程引數為 mysql 使用者變數。
set @a = 10;
set @b = 20;
call pr_add(@a, @b);
三、mysql 儲存過程特點
建立 mysql 儲存過程的簡單語法為:
create procedure 儲存過程名字()
([in|out|inout] 引數 datatype
)begin
mysql 語句;
end;
mysql 儲存過程引數如果不顯式指定「in」、「out」、「inout」,則預設為「in」。習慣上,對於是「in」 的引數,我們都不會顯式指定。
1. mysql 儲存過程名字後面的「()」是必須的,即使沒有乙個引數,也需要「()」
2. mysql 儲存過程引數,不能在引數名稱前加「@」,如:mailto:%e2%80%9c@a int」。下面的建立儲存過程語法在 mysql 中是錯誤的(在 sql server 中是正確的)。 mysql 儲存過程中的變數,不需要在變數名字前加「@」,雖然 mysql 客戶端使用者變數要加個「@」。
create procedure pr_add
(@a int,- 錯誤
b int - 正確
)3. mysql 儲存過程的引數不能指定預設值。
4. mysql 儲存過程不需要在 procedure body 前面加 「as」。而 sql server 儲存過程必須加 「as」 關鍵字。
create procedure pr_add
(a int,
b int
)as - 錯誤,mysql 不需要 「as」
begin
mysql statement ...;
end;
5. 如果 mysql 儲存過程中包含多條 mysql 語句,則需要 begin end 關鍵字。
create procedure pr_add
(a int,
b int
)begin
mysql statement 1 ...;
mysql statement 2 ...;
end;
6. mysql 儲存過程中的每條語句的末尾,都要加上分號 「;」
...declare c int;
if a is null then
set a = 0;
end if;
...end;
7. mysql 儲存過程中的注釋。
/*這是個
多行 mysql 注釋。
/declare c int; - 這是單行 mysql 注釋 (注意- 後至少要有乙個空格)
if a is null then 這也是個單行 mysql 注釋
set a = 0;
end if;
...end;
8. 不能在 mysql 儲存過程中使用 「return」 關鍵字。
set c = a + b;
select c as sum;
/*return c;- 不能在 mysql 儲存過程中使用。return 只能出現在函式中。
/end;
9. 呼叫 mysql 儲存過程時候,需要在過程名字後面加「()」,即使沒有乙個引數,也需要「()」
call pr_no_param();
10. 因為 mysql 儲存過程引數沒有預設值,所以在呼叫 mysql 儲存過程時候,不能省略引數。可以用 null 來替代。
call pr_add(10, null);
Mysq 儲存過程
drop procedure if exists xl 建立儲存過程 delimiter 轉譯字元 使用 代替 create procedure xl begin select from fd car report end delimiter 轉譯字元 使用 代替 call xl 呼叫儲存過程 de...
MySQL建立儲存過程
在開發過程中,經常會遇到重複使用某乙個功能的情況,為此,mysql引入了儲存過程 儲存過程 就是一條或多條sql語句的集合,當對資料庫進行一系列複雜操作時,儲存過程可以將這些複雜操縱,封裝成乙個 塊,以便重複使用,大大減少資料庫開發人員的工作量 使用create procedure語句 create...
MYSQL 建立儲存過程
無引數儲存過程 delimiter create procedure myfist proc 建立儲存過程 begin select stu id from score where grade 80 and c name 計算機 select name from student where id i...