mysql有沒有儲存過程

2022-06-15 22:00:22

mysql有儲存過程。儲存過程是一組為了完成特定功能的SQL語句集合,MySQL5.0版本以前不支援儲存過程,但從5.0版本開始支援儲存過程,這樣既提高了資料庫的處理速度,同時也提高了資料庫程式設計的靈活性。儲存過程可以用來轉換資料、資料遷移、製作報表,它類似於程式語言,一次執行成功,就可以隨時被呼叫,完成指定的功能操作。

本教學操作環境:windows7系統、mysql8版本、Dell G3電腦。

mysql有儲存過程。

儲存過程是一組為了完成特定功能的 SQL 語句集合。使用儲存過程的目的是將常用或複雜的工作預先用 SQL 語句寫好並用一個指定名稱儲存起來,這個過程經編譯和優化後儲存在資料庫伺服器中,因此稱為儲存過程。當以後需要資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫「CALL儲存過程名字」即可自動完成。

常用運算元據庫的 SQL 語句在執行的時候需要先編譯,然後執行。儲存過程則採用另一種方式來執行 SQL 語句。

一個儲存過程是一個可程式化的函數,它在資料庫中建立並儲存,一般由 SQL 語句和一些特殊的控制結構組成。當希望在不同的應用程式或平臺上執行相同的特定功能時,儲存過程尤為合適。

MySQL 5.0 版本以前並不支援儲存過程,這使 MySQL 在應用上大打折扣。MySQL 從 5.0 版本開始支援儲存過程,既提高了資料庫的處理速度,同時也提高了資料庫程式設計的靈活性

儲存過程是資料庫中的一個重要功能,儲存過程可以用來轉換資料、資料遷移、製作報表,它類似於程式語言,一次執行成功,就可以隨時被呼叫,完成指定的功能操作。

使用儲存過程不僅可以提高資料庫的存取效率,同時也可以提高資料庫使用的安全性。

對於呼叫者來說,儲存過程封裝了 SQL 語句,呼叫者無需考慮邏輯功能的具體實現過程。只是簡單呼叫即可,它可以被 Java 和 C# 等程式語言呼叫。

編寫儲存過程對開發者要求稍微高一些,但這並不影響儲存過程的普遍使用,因為儲存過程有如下優點:

1) 封裝性

通常完成一個邏輯功能需要多條 SQL 語句,而且各個語句之間很可能傳遞引數,所以,編寫邏輯功能相對來說稍微複雜些,而儲存過程可以把這些 SQL 語句包含到一個獨立的單元中,使外界看不到複雜的 SQL 語句,只需要簡單呼叫即可達到目的。並且資料庫專業人員可以隨時對儲存過程進行修改,而不會影響到呼叫它的應用程式原始碼。

2) 可增強 SQL 語句的功能和靈活性

儲存過程可以用流程控制語句編寫,有很強的靈活性,可以完成複雜的判斷和較複雜的運算。

3) 可減少網路流量

由於儲存過程是在伺服器端執行的,且執行速度快,因此當客戶計算機上呼叫該儲存過程時,網路中傳送的只是該呼叫語句,從而可降低網路負載。

4) 高效能

當儲存過程被成功編譯後,就儲存在資料庫伺服器裡了,以後使用者端可以直接呼叫,這樣所有的 SQL 語句將從伺服器執行,從而提高效能。但需要說明的是,儲存過程不是越多越好,過多的使用儲存過程反而影響系統效能。

5) 提高資料庫的安全性和資料的完整性

儲存過程提高安全性的一個方案就是把它作為中間元件,儲存過程裡可以對某些表做相關操作,然後儲存過程作為介面提供給外部程式。這樣,外部程式無法直接運算元據庫表,只能通過儲存過程來操作對應的表,因此在一定程度上,安全性是可以得到提高的。

6) 使資料獨立

資料的獨立可以達到解耦的效果,也就是說,程式可以呼叫儲存過程,來替代執行多條的 SQL 語句。這種情況下,儲存過程把資料同使用者隔離開來,優點就是當資料表的結構改變時,呼叫表不用修改程式,只需要資料庫管理者重新編寫儲存過程即可。

MySQL 儲存過程範例

我們將逐步向您展示如何使用CREATE PROCEDURE開發第一個MySQL儲存過程。此外,我們將向您展示如何從SQL語句呼叫儲存過程。

編寫第一個MySQL儲存過程

我們將開發一個簡單的儲存過程,以GetAllProducts() 幫助您熟悉語法。GetAllProducts() 儲存過程選擇所有產品從products 表。

啟動mysql使用者端工具並鍵入以下命令:

 DELIMITER //
 CREATE PROCEDURE GetAllProducts()
   BEGIN
   SELECT productCode, productName FROM products;
   END //
 DELIMITER ;

執行命令:

mysql> DELIMITER //
mysql> CREATE PROCEDURE GetAllProducts()
-> BEGIN
-> SELECT productCode, productName FROM products;
-> END //
Query OK, 0 rows affected (0.02 sec)
mysql> DELIMITER ;

讓我們更詳細地檢查儲存過程:

  • 第一個命令是DELIMITER //,與儲存過程語法無關。DELIMITER語句將標準分隔符(分號(;)更改為另一個分號)。在這種情況下,分隔符從分號(;)更改為雙斜線 //。為什麼我們要更改分隔符?因為我們希望將儲存過程作為一個整體傳遞給伺服器,而不是讓mysql工具一次解釋每個語句。在END關鍵字之後,我們使用分隔符// 來指示儲存過程的結束。最後一個命令(DELIMITER; )將分隔符更改回分號(;)。

  • 我們使用CREATE PROCEDURE 語句來建立一個新的儲存過程。我們在CREATE PROCEDURE 語句後指定儲存過程的名稱。在這種情況下,儲存過程的名稱是GetAllProducts 。我們將括號放在儲存過程的名稱之後。

  • BEGIN和之間的部分 END 稱為儲存過程的主體。您將宣告性SQL語句放在正文中以處理業務邏輯。在這個儲存過程中,我們使用一個簡單的SELECT語句來查詢products表中的資料。

檢視儲存過程

我們可以使用如下命令檢視指定的資料庫中有哪些儲存過程:

 select name from mysql.proc where db='mysqldemo';

執行結果:

1.png

呼叫儲存過程

要呼叫儲存過程,請使用以下SQL命令:

CALL stored_procedure_name();

您使用CALL 語句呼叫儲存過程,例如,要呼叫GetAllProducts() 儲存過程,請使用以下語句:

CALL GetAllProducts();

如果執行上述語句,您將獲得products表中的所有產品。

2.png

【相關推薦:】

以上就是mysql有沒有儲存過程的詳細內容,更多請關注TW511.COM其它相關文章!