mysql中什麼是預存程序

青灯夜游
發布: 2021-06-15 09:04:21
原創
6193 人瀏覽過

在mysql中,預存程序是一組為了完成特定功能的SQL語句集合。使用預存程序的目的是將常用或複雜的工作預先用SQL語句寫好並用一個指定名稱儲存起來,這個過程經過編譯和最佳化後儲存在資料庫伺服器中,因此稱為預存程序。

mysql中什麼是預存程序

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

預存程序(Stored Procedure)是一種在資料庫中儲存複雜程序,以便外部程式呼叫的一種資料庫物件。

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

常用操作資料庫的 SQL 語句在執行的時候需要先編譯,然後再執行。預存程序則採用另一種方​​式來執行 SQL 語句。

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

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

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

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

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

建立預存程序

可以使用CREATE PROCEDURE 語句建立預存程序,語法格式如下:

CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体>
登入後複製

[過程參數[,…] ] 格式

[ IN | OUT | INOUT ] <参数名> <类型>
登入後複製

語法說明如下:

#1) 過程名稱

預存程序的名稱,預設在目前資料庫中建立。若需要在特定資料庫中建立預存程序,則要在名稱前面加上資料庫的名稱,即 db_name.sp_name。

要注意的是,名稱應盡量避免選取與 MySQL 內建函數相同的名稱,否則會發生錯誤。

2) 過程參數

預存程序的參數清單。其中,<參數名>為參數名,<型別>為參數的型別(可以是任何有效的 MySQL 資料型別)。當有多個參數時,參數清單中彼此間以逗號分隔。預存程序可以沒有參數(此時預存程序的名稱後仍需加上一對括號),也可以有 1 個或多個參數。

MySQL 預存程序支援三種類型的參數,即輸入參數、輸出參數和輸入/輸出參數,分別以 IN、OUT 和 INOUT 三個關鍵字標識。其中,輸入參數可以傳遞給一個預存程序,輸出參數用於預存程序需要傳回一個操作結果的情形,而輸入/輸出參數既可以充當輸入參數也可以充當輸出參數。

要注意的是,參數的取名不要與資料表的列名相同,否則儘管不會傳回出錯訊息,但是預存程序的SQL 語句會將參數名看作列名,從而引發不可預知的結果。

3) 過程體

預存程序的主體部分,也稱為預存程序體,包含在程序呼叫的時候必須執行的 SQL 語句。這個部分以關鍵字 BEGIN 開始,以關鍵字 END 結束。若預存程序體中只有一條 SQL 語句,則可以省略 BEGIN-END 標誌。

範例:

建立名稱為ShowStuScore 的儲存過程,預存程序的作用是從學生成績資訊表中查詢學生的成績訊息,輸入的SQL 語句和執行過程如下所示。

mysql> DELIMITER //
mysql> CREATE PROCEDURE ShowStuScore()
    -> BEGIN
    -> SELECT * FROM tb_students_score;
    -> END //
Query OK, 0 rows affected (0.09 sec)
登入後複製

結果顯示 ShowStuScore 預存程序已經建立成功。

刪除預存程序

預存程序建立後,就會一直保存在資料庫伺服器上,直到刪除。當 MySQL 資料庫中存在廢棄的預存程序時,我們需要將它從資料庫中刪除。

MySQL 中使用 DROP PROCEDURE 語句來刪除資料庫中已經存在的預存程序。語法格式如下:

DROP PROCEDURE [ IF EXISTS ] <过程名>
登入後複製

語法說明如下:

  • 過程名稱:指定要刪除的預存程序的名稱。

  • IF EXISTS:指定这个关键字,用于防止因删除不存在的存储过程而引发的错误。

注意:存储过程名称后面没有参数列表,也没有括号,在删除之前,必须确认该存储过程没有任何依赖关系,否则会导致其他与之关联的存储过程无法运行。

实例

下面删除存储过程 ShowStuScore,SQL 语句和运行结果如下:

mysql> DROP PROCEDURE ShowStuScore;
Query OK, 0 rows affected (0.08 sec)
登入後複製

删除后,可以通过查询 information_schema 数据库下的 routines 表来确认上面的删除是否成功。SQL 语句和运行结果如下:

mysql> SELECT * FROM information_schema.routines WHERE routine_name=&#39;ShowStuScore&#39;;
Empty set (0.03 sec)
登入後複製

结果显示,没有查询出任何记录,说明存储过程 ShowStuScore 已经被删除了。

(推荐教程:mysql视频教程

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

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!