定義
存儲過程:就是為以后的使用而保存的一條或多條 MySQL語句的集合。可將其視為批文件,雖然它們的作用不僅限於批處理。
個人使用存儲過程的原因就是因為 存儲過程比使用單獨的SQL語句要快
有如下表(名為 a)
其下,所有都可以用一條sql解決,但是我為了熟悉 存儲過程,而采用函數式來進行書寫
簡單案例 1 : 創建函數 name
, 需要傳入 id值,返回 name值:
# 創建一個名為 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_1
要求傳入id值,返回id對應的name字段,保存到變量 @temp中傳入的變量需要加@符號,否則會報錯
[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]
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),得出結果為小剛
簡單案例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