資料庫預存程序怎麼寫

angryTom
發布: 2019-08-21 13:16:21
原創
13876 人瀏覽過

資料庫預存程序怎麼寫

  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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板