首頁 > 資料庫 > mysql教程 > mysql有沒有預存程序

mysql有沒有預存程序

青灯夜游
發布: 2022-06-15 18:37:11
原創
3864 人瀏覽過

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

mysql有沒有預存程序

本教學操作環境: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';
登入後複製

運行結果:

mysql有沒有預存程序

呼叫預存程序

#要呼叫儲存過程,請使用下列SQL指令:

CALL stored_procedure_name();
登入後複製

您使用CALL 語句呼叫預存程序,例如,若要呼叫GetAllProducts() 預存程序,請使用下列語句:

CALL GetAllProducts();
登入後複製

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

mysql有沒有預存程序

【相關推薦:mysql影片教學

以上是mysql有沒有預存程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
linux安裝mysql報錯
來自於 1970-01-01 08:00:00
0
0
0
mysql 升級後無法重新啟動mysql服務的問題
來自於 1970-01-01 08:00:00
0
0
0
MySQL停止進程
來自於 1970-01-01 08:00:00
0
0
0
phpstudy不能啟動mysql?
來自於 1970-01-01 08:00:00
0
0
0
環境中mysql
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板