禁止碼迷,布布扣,豌豆代理,碼農教程,愛碼網等第三方爬蟲網站爬取!
express
目錄編程
實際操做中會出現,對於一些操做須要多條語句的配合才能完成。這裏能夠用編程中的順序結構來類比,當我每次須要完成這個操做都須要把完整的 SQL 語句寫一遍,這麼寫不只麻煩,還容易出錯。咱們在編程中是怎麼優化這個問題的?就是將固定操做的代碼塊封裝成一個函數,而後經過參數的傳遞實現函數調用。所謂存儲過程就與編程中的函數有相似之處,是一條或多條 MySQL 語句的集合,也能夠看成是批處理文件。存儲過程的語句編寫會稍微複雜一些,同時也會有權限問題,可是存儲過程的優點仍是很明顯的,在於簡捷、安全、性能好 3 個方面:安全
定義存儲過程要使用 CREATE PROCEDURE 定義,在語句後面要給出存儲過程名,若能夠接受參數就須要在括號內羅列出來。語法框架爲:服務器
CREATE PROCEDURE name(variable1,variable2……) BEGIN --MySQL 語句 END;
建立存儲過程時須要指定哪些變量須要輸入和輸出,用 OUT 關鍵字指定,輸入用 IN 關鍵字指定,若同時須要輸入和輸出,用 INOUT 關鍵字指定。
框架
DELIMITER //
執行存儲過程的語句爲 CALL name(),若是須要傳參就要在括號之間填充參數。
ide
存儲過程將在服務器上供調用,咱們能夠把創建的存儲過程刪掉,使用 DROP PROCEDURE 刪除語句實現。
若指定的存儲過程不存在會報錯,能夠使用下列語句實現異常處理。函數
DROP PROCEDURE IF EXISTS使用參數
在這裏給出 3 個參數,這些參數是此存儲過程所接受的,每一個參數必須指定數據類型,例以下面就使用了十進制數字。OUT 就說明這些參數是須要返回給調用者的,操做完值以後就使用 INTO 將值注入變量之中。而對於存儲過程的運行的代碼就封裝在 BEGIN 和 END 語句以內。
此時用 CALL 語句調用存儲過程後,返回的變量將會被調出來。MySQL 中的變量都是以 @開始的,因爲存儲過程有 3 個參數,所以也必須傳 3 個參數。
這個時候就使用 SELECT 語句依次查看變量。
性能
建立時須要用關鍵字 IN 指定傳入的參數。
傳參就要按照參數表填寫變量,這個順序不能有錯。
優化
在存儲過程當中引入分支處理的代碼框架爲:網站
IF expression1 THEN --MySQL 語句段 ELSEIF expression2 THEN --MySQL 語句段 ELSE --MySQL 語句段 END IF;
這個實例實現的功能就更強了,那麼這裏解釋一下選擇結構的功能。IF 語句檢查變量是都是真,真的狀況下用一個 SELECT 語句將值注入變量中,若爲假則用另外一個 SELECT 語句將值注入變量。
如今傳入 2 組參數進去試試看。
使用如下語句能夠檢查建立存儲過程的語句。
SHOW CREATE PROCUDURE name;
如下語句能夠查看存儲過程的建立信息。
SHOW PROCUDURE STATUS LIKE name;