首頁 > 資料庫 > mysql教程 > 資料庫預存程序怎麼寫

資料庫預存程序怎麼寫

(*-*)浩
發布: 2019-05-11 09:24:12
原創
5794 人瀏覽過

預存程序簡介

SQL語句需要先編譯然後執行,而預​​存程序(Stored Procedure)是一組為了完成特定功能的SQL語句集,經編譯後儲存在在資料庫中,使用者透過指定預存程序的名字並給定參數(如果該預存程序帶有參數)來呼叫執行它。預存程序是可程式設計的函數,在資料庫中建立並儲存,可以由SQL語句和控制結構組成。當想要在不同的應用程式或平台上執行相同的函數,或封裝特定功能時,預存程序是非常有用的。資料庫中的預存程序可以看做是對程式設計中物件導向方法的模擬,它允許控制資料的存取方式。

推薦課程:MySql教學

資料庫預存程序怎麼寫

預存程序的優點:

    (1).增強SQL語言的功能和靈活性:預存程序可以用控制語句編寫,具有很強的彈性,可以完成複雜的判斷和較複雜的運算。

    (2).標準元件式程式設計:在儲存程序建立後,可以在程式中被多次調用,而不必重新編寫該預存程序的SQL語句。而且資料庫專業人員可以隨時對預存程序進行修改,對應用程式原始碼毫無影響。

    (3).較快的執行速度:如果某一作業包含大量的Transaction-SQL程式碼或分別被多次執行,那麼預存程序要比批次的執行速度快很多。因為預存程序是預編譯的。在首次運行預存程序時查詢,優化器對其進行分析優化,並且給出最終被儲存在系統表中的執行計劃。而批次的Transaction-SQL語句在每次執行時都要進行編譯和最佳化,速度相對要慢一些。

    (4).減少網路流量:針對同一個資料庫物件的操作(如查詢、修改),如果此操作所涉及的Transaction-SQL語句被組織進儲存過程,那麼當在客戶計算機上呼叫該預存程序時,網路中傳送的只是該呼叫語句,從而大大減少網路流量並降低了網路負載。

    (5).作為一種安全機制來充分利用:透過對執行某一預存程序的權限進行限制,能夠實現對相應的數據的存取權限的限制,避免了非授權用戶對數據的訪問,保證了資料的安全。

MySQL的預存程序

    預存程序是資料庫的一個重要的功能,MySQL 5.0以前不支援預存程序,這使得MySQL在應用程式上大打折扣。好在MySQL 5.0開始支援預存程序,這樣即可以大幅提高資料庫的處理速度,同時也可以提高資料庫程式設計的彈性。

MySQL預存程序的建立

語法

CREATE PROCEDURE  过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 ...] 过程体
DELIMITER //  
  CREATE PROCEDURE myproc(OUT s int)    
    BEGIN     
     SELECT COUNT(*) INTO s FROM students;    
    END    
    //
DELIMITER ;
登入後複製

分隔符號

MySQL預設以";"為分隔符,如果沒有宣告分割符,則編譯器會把預存程序當成SQL語句處理,因此編譯過程會報錯,所以事先用「DELIMITER //」宣告目前段分隔符,請編譯器把兩個"//"之間的內容當作預存程序的程式碼,不會執行這些程式碼;「DELIMITER ;」的意思是把分隔符號還原。

參數

預存程序依需求可能會有輸入、輸出、輸入輸出參數,如果有多個參數以","分割開。 MySQL預存程序的參數用在預存程序的定義,共有三種參數型別,IN,OUT,INOUT:

IN參數的值必須在呼叫預存程序時指定,在預存程序中修改該參數的值不能被傳回,為預設值OUT:該值可在儲存過程內部改變,並可返回INOUT:呼叫時指定,並且可被改變和返回

過程體

過程體的開始與結束使用BEGIN與END進行標識。

總結

本次主要是掌握了對於儲存過程的使用,總的來說,儲存過程實際上類似於C 中的函數,而在C 中我們是需要在創建這一過程的文件中去調用這一函數,但是對於存儲過程來說,相當於是將這一操作過程存儲在數據庫中,可以使用call與對其進行調用,並輸入或輸出一些參數和結果。

印象最深的是類似「in n int」和「out sum int」這樣的對於輸入輸出的定義,透過查看相關博客,可以總結如下對於輸入輸出定義的使用規律:

MySQL預存程序的參數用於預存程序的定義,共有三種參數型別

IN,OUT,INOUT
格式為:Create procedure|function([[IN |OUT |INOUT ] 參數名資料類形...])

IN 輸入參數
表示此參數的值必須在呼叫預存程序時指定,在預存程序中修改此參數的值不能被傳回,為預設值

OUT 輸出參數
此值可在預存程序內部變更,並可傳回

INOUT 輸入輸出參數
呼叫時指定,並且可變更和傳回

IN 和 OUT在實驗中已有體會,主要是對INOUT的理解,這裡引用一個例子:

參數inout的使用實例(既能輸入一個值又能傳出一個值)
語句功能:傳一個年齡,自動讓年齡增長10歲
create procedure p3(inout age int)
begin
set age:=age 10;
end
其中:呼叫的時候,inout型的參數值既是輸入類型又是輸出類型,給它一個值,值不是變量,因此我們需要先設定一個變數並初始化這個值,呼叫的時候直接傳這個變數即可。
set @currentAge=8$
call p3(@currentAge)$
select @currentAge$
建立並執行完預存程序,執行結果如下:

        

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

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板