在MYSQL 中終於引入了存儲過程這一新特性這將大大增強MYSQL 的數據庫處理能力在本文中將指導讀者快速掌握MYSQL 的存儲過程的基本知識帶領用戶入門
存儲過程介紹
存儲過程是一組為了完成特定功能的SQL語句集經編譯後存儲在數據庫中用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它存儲過程可由應用程序通過一個調用來執行而且允許用戶聲明變量 同時存儲過程可以接收和輸出參數返回執行存儲過程的狀態值也可以嵌套調用
存儲過程的優點
作為存儲過程有以下這些優點
()減少網絡通信量調用一個行數不多的存儲過程與直接調用SQL語句的網絡通信量可能不會有很大的差別可是如果存儲過程包含上百行SQL語句那麼其性能絕對比一條一條的調用SQL語句要高得多
()執行速度更快存儲過程創建的時候數據庫已經對其進行了一次解析和優化其次存儲過程一旦執行在內存中就會保留一份這個存儲過程這樣下次再執行同樣的存儲過程時可以從內存中直接中讀取
()更強的安全性存儲過程是通過向用戶授予權限(而不是基於表)它們可以提供對特定數據的訪問提高代碼安全比如防止 SQL注入
() 業務邏輯可以封裝存儲過程中這樣不僅容易維護而且執行效率也高
當然存儲過程也有一些缺點比如
可移植性方面當從一種數據庫遷移到另外一種數據庫時不少的存儲過程的編寫要進行部分修改
存儲過程需要花費一定的學習時間去學習比如學習其語法等
在MYSQL中推薦使用MYSQL Query Browswer()這個工具去進行存儲過程的開發和管理下面分步驟來學習MYSQL中的存儲過程
定義存儲過程的結束符
在存儲過程中通常要輸入很多SQL語句而SQL語句中每個語句以分號來結束因此要告訴存儲過程什麼位置是意味著整個存儲過程結束所以我們在編寫存儲過程前先定義分隔符我們這裡定義//為分隔符我們使用DELIMITER //這樣的語法就可以定義結束符了當然你可以自己定義其他喜歡的符號
如何創建存儲過程
下面先看下一個簡單的例子代碼如下
DELIMITER //CREATEPROCEDURE `p` ()
LANGUAGE SQL
DETERMINISTIC
SQL SECURITY DEFINER
COMMENT A procedureBEGINSELECTHello World !;
END//
下面講解下存儲過程的組成部分
)首先在定義好終結符後使用CREATE PROCEDURE+存儲過程名的方法創建存儲過程LANGUAGE選項指定了使用的語言這裡默認是使用SQL
)DETERMINISTIC關鍵詞的作用是當確定每次的存儲過程的輸入和輸出都是相同的內容時可以使用該關鍵詞否則默認為NOT DETERMINISTIC
) SQL SECURITY關鍵詞是表示調用時檢查用戶的權限當值為INVOKER時表示是用戶調用該存儲過程時檢查默認為DEFINER即創建存儲過程時檢查
) COMMENT部分是存儲過程的注釋說明部分
)在BEGIN END部分中是存儲過程的主體部分
From:http://tw.wingwit.com/Article/program/MySQL/201404/30557.html