數據庫對象表時存儲和操作數據的邏輯結構,而數據庫對象存儲過程和函數,則是用來實現將一組關于表操作的sql語句當作一個整體來執行。在數據庫系統中,當調用存儲過程和函數時,則會執行這些對象中所設置的sql語句組,從而實現相應功能。 
1. 為什么使用存儲過程和函數的操作 
    有時針對表的一個完整操作往往不是單條sql語句就可以實現的,而是需要一組sql語句來實現。在具體應用當中,一個完整的操作會包含多條sql語句,在執行過程中需要根據前面sql語句的執行結果有選擇地執行后面sql語句。 
    存儲過程和函數可以簡單理解為一條或多條sql語句的集合。存儲過程和函數就是事先經過編譯并存儲在數據庫中的一段sql語句集合。 
    存儲過程和函數有什么區別呢?這兩者的主要區別在于函數必須有返回值,而存儲過程則沒有。存儲過程的參數類型遠遠多于函數的參數類型。 
關于存儲過程和函數的優點如下: 
      1. 存儲過程和函數允許標準組件式編程,提高了sql語句的重用性、共享性和可移植性。 
      2. 存儲過程和函數能夠實現較快的執行速度,能夠減少網絡流量。 
      3. 存儲過程和函數可以作為一種安全機制來利用。 
關于存儲過程和函數的缺點如下: 
      1. 存儲過程和函數的編寫比單句sql語句復雜,需要用戶有更高的技能和更豐富的經驗。 
      2. 在編寫存儲過程和函數時,需要創建這些數據庫對象的權限。=
2. 創建存儲過程和函數 
2.1 創建存儲過程語法形式:
語法形式如下:
| create procedure procedure_name([procedure_parameter[,...]]) [characteristic...] routine_body//說明:procedure_name參數表示所要創建的存儲過程的名字,procedure_parameter參數表示存儲過程的參數,characteristic參數表示存儲過程的特性,routine_body參數表示存儲過程的sql語句代碼,可以用begin...end來標志sql語句的開始和結束。//注意:在具體創建存儲過程時,存儲過程名不能和已經存在的存儲過程名重復,推薦存儲過程名為procedure_xxx或者proce_xxx;//procedure_parameter 中每個參數的語法形式為:[IN|OUT|INOUT] parameter_name type//該語句中每個參數由三部分組成,分別為輸入/輸出類型、參數名和參數類型。 | 
characteristic參數的取值為:
language sql
|[not] deterministic
|{constains sql | no sql | reads sql data|modifies sql data}
|sql security {definer | invoker}
|comment 'string'
1. language sql,表示存儲過程的routine_body部分由sql語言的語句組成。為mysql軟件所有默認的語句。
新聞熱點
疑難解答