萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> MySQL數據庫存儲過程入門教程(1/6)

MySQL數據庫存儲過程入門教程(1/6)

今天入手mysql5了發現mysql5中有了存儲過程了,以前都是使用mysql4所以沒有,下面我來把我對mysql存儲過程的一些理解與學習筆記給大家分享一下,希望對其它存儲過程入門者會有幫助。

存儲過程介紹

存儲過程是一組為了完成特定功能的SQL語句集,經編譯後存儲在數據庫中。用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程可由應用程序通過一個調用來執行,而且允許用戶聲明變量 。同時,存儲過程可以接收和輸出參數、返回執行存儲過程的狀態值,也可以嵌套調用。

存儲過程的優點

作為存儲過程,有以下這些優點:

  (1)減少網絡通信量。調用一個行數不多的存儲過程與直接調用SQL語句的網絡通信量可能不會有很大的差別,可是如果存儲過程包含上百行SQL語句,那麼其性能絕對比一條一條的調用SQL語句要高得多。

  (2)執行速度更快。存儲過程創建的時候,數據庫已經對其進行了一次解析和優化。其次,存儲過程一旦執行,在內存中就會保留一份這個存儲過程,這樣下次再執行同樣的存儲過程時,可以從內存中直接中讀取。

  (3)更強的安全性。存儲過程是通過向用戶授予權限(而不是基於表),它們可以提供對特定數據的訪問,提高代碼安全,比如防止 SQL注入。

  (4) 業務邏輯可以封裝存儲過程中,這樣不僅容易維護,而且執行效率也高

  當然存儲過程也有一些缺點,比如:

  1 可移植性方面:當從一種數據庫遷移到另外一種數據庫時,不少的存儲過程的編寫要進行部分修改。

  2 存儲過程需要花費一定的學習時間去學習,比如學習其語法等。

存儲過程學習筆記

Variables 變量

  在復合語句中聲明變量的指令是DECLARE。

  (1) Example with two DECLARE statements

兩個DECLARE語句的例子

 代碼如下 復制代碼

CREATE PROCEDURE p8 ()

BEGIN

DECLARE a INT;

DECLARE b INT;

SET a = 5;

SET b = 5;

INSERT INTO t VALUES (a);

SELECT s1 * a FROM t WHERE s1 >= b;

END; // /* I won't CALL this */

  在過程中定義的變量並不是真正的定義,你只是在BEGIN/END塊內定義了而已(譯注:也就是形參)。

  注意這些變量和會話變量不一樣,不能使用修飾符@你必須清楚的在BEGIN/END塊中聲明變量和它們的類型。

  變量一旦聲明,你就能在任何能使用會話變量、文字、列名的地方使用。

  (2) Example with no DEFAULT clause and SET statement

  沒有默認子句和設定語句的例子

 代碼如下 復制代碼

CREATE PROCEDURE p9 ()

BEGIN

DECLARE a INT /* there is no DEFAULT clause */;

DECLARE b INT /* there is no DEFAULT clause */;

SET a = 5; /* there is a SET statement */

SET b = 5; /* there is a SET statement */

INSERT INTO t VALUES (a);

SELECT s1 * a FROM t WHERE s1 >= b;

END; // /* I won't CALL this */

  有很多初始化變量的方法。如果沒有默認的子句,那麼變量的初始值為NULL。你可以在任何時候使用SET語句給變量賦值。

  (3) Example with DEFAULT clause

  含有DEFAULT子句的例子

 代碼如下 復制代碼

CREATE PROCEDURE p10 ()

BEGIN

DECLARE a, b INT DEFAULT 5;

INSERT INTO t VALUES (a);

SELECT s1 * a FROM t WHERE s1 >= b;

END; //


  我們在這裡做了一些改變,但是結果還是一樣的。在這裡使用了DEFAULT子句來設定初始值,這就不需要把DECLARE和SET語句的實現分開了。

  (4) Example of CALL

  調用的例子

 代碼如下 復制代碼

mysql> CALL p10() //

+--------+

| s1 * a |

+--------+

| 25 |

| 25 |

+--------+

2 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

  

結果顯示了過程能正常工作

  (5) Scope

  作用域

 代碼如下 復制代碼

CREATE PROCEDURE p11 ()

BEGIN

DECLARE x1 CHAR(5) DEFAULT 'outer';

BEGIN

DECLARE x1 CHAR(5) DEFAULT 'inner';

SELECT x1;

END;

SELECT x1;

END; //


  

首頁 1 2 3 4 5 6 末頁

copyright © 萬盛學電腦網 all rights reserved