存儲過程:就是爲之後的使用而保存的一條或多條 MySQL語句的集合。可將其視爲批文件,雖然它們的做用不只限於批處理。mysql
我的使用存儲過程的緣由就是由於 存儲過程比使用單獨的SQL語句要快sql
其下,全部均可以用一條sql解決,可是我爲了熟悉 存儲過程,而採用函數式來進行書寫數據庫
簡單案例 1 : 建立函數 name函數
, 須要傳入 id值,返回 name值:spa
# 建立一個名爲 name的存儲過程
DELIMITER // create procedure name ( in _id int ) BEGIN select name from a where id=_id; END // DELIMITER;
其中, DELIMITER //告訴命令行實用程序使用 //做爲新的語句結束分隔符,
能夠看到標誌存儲過程結束的 END定義爲END//而不是END; 。
這樣,存儲過程體內的 ;仍然保持不動,而且正確地傳遞給數據庫引擎。
最後,爲恢復爲原來的語句分隔符,可以使用 DELIMITER ;。
除\符號外,任何字符均可以用做語句分隔符。若是你使用的是 mysql命令行實用程序,在閱讀本章時請記住這裏的內容。
在運行此存儲函數以後,獲得 以下圖命令行
簡單案例2 建立函數 name_13d
要求傳入id值,返回id對應的name字段,保存到變量 @temp中傳入的變量須要加@符號,不然會報錯code
[Procedure execution failed 1414 - OUT or INOUT argument 2 for routine test.name_1 is not a variable or NEW pseudo-variable in BEFORE trigger]blog
DELIMITER // create procedure name_1 ( in _id int, out name_ varchar(255) ) BEGIN select name into name_ from a where id=_id; END // DELIMITER;
須要注意的是,在運行的時候,須要傳入id值,和變量名,以下圖(使用navicat),得出結果爲小剛io
簡單案例3 建立函數 name_2
須要傳入id值,對id值+1以後,返回name值
DELIMITER // create procedure name_2 ( in _id int, out name_ varchar(255) ) BEGIN DECLARE id_add int; ##聲明變量 id_add select id into id_add from a where id=(_id+1); select name into name_ from a where id=id_add; END // DELIMITER;講解: 拿到 +1以後的id 放入id_add