mysql存儲過程是怎樣的呢?下面就讓我們一起來了解一下吧:
mysql中存儲過程是屬于一種在數(shù)據(jù)庫中存儲復(fù)雜程序,以便于外部程序調(diào)用的一種數(shù)據(jù)庫對象。
存儲過程一般來說是為了完成特定功能的SQL語句集,經(jīng)過編譯后創(chuàng)建并保存在數(shù)據(jù)庫中,用戶可以通過指定存儲過程的名字并給定參數(shù)(通常是在需要時(shí))來進(jìn)行調(diào)用執(zhí)行。
mysql存儲過程優(yōu)點(diǎn):
1、存儲過程可以進(jìn)行封裝,并且隱藏復(fù)雜的商業(yè)邏輯。
2、存儲過程能夠回傳值,并能接受參數(shù)。
3、存儲過程通常是無法使用SELECT指令來進(jìn)行運(yùn)行的,由于它是屬于子程序,與查看表、數(shù)據(jù)表或是用戶定義函數(shù)不同。
4、存儲過程能夠用于數(shù)據(jù)檢驗(yàn),強(qiáng)制實(shí)行商業(yè)邏輯等。
當(dāng)然,它也存在了一部分缺點(diǎn):
1、存儲過程一般是定制化于特定的數(shù)據(jù)庫上,因?yàn)槠渌С值木幊陶Z言不同。當(dāng)切換到了其他廠商的數(shù)據(jù)庫系統(tǒng)時(shí),就需要重寫原有的存儲過程了。
2、存儲過程的性能調(diào)校與撰寫,一般會受限于各種數(shù)據(jù)庫系統(tǒng)。
參考示例:
存儲過程的操作,具體代碼如下:
創(chuàng)建:
CREATE PROCEDURE sp_name([proc_parameter[,...]])
[characteristic...] routine_body
proc_parameter:
[IN|OUT|INOUT] param_name type #type: Any valid MySQL data type
characteristic:
LANGUAGE SQL
|[NOT] DETERMINISTIC|{CONTAINS SQL|NO SQL|READS SQL DATA|MODIFIES SQL DATA}|SQL SECURITY {DEFINAER|INVOKER}|COMMENT 'string'
routine_body:
Valid SQL procedure statement or statements
修改:
ALTER PROCEDURE sp_name [characteristic...]
characteristic:
{CONTAINS SQL|NO SQL|READS SQL DATA|MODIFIES SQL DATA}|SQL SECURITY {DEFINAER|INVOKER}|COMMENT 'string'
調(diào)用:
CALL sp_name([parameter[,...]])
刪除:
DROP PROCEDURE sp_name
查看:
show PROCEDURE STATUS [like 'pattern']
SHOW CREATE PROCEDURE sp_name
在MYSQL 存儲過程中的關(guān)鍵語法:
聲明語句結(jié)束符,可自定義為:
DELIMITER $$
或
DELIMITER //
聲明存儲過程,即:
CREATE PROCEDURE demo_in_parameter(IN p_in int)
存儲過程開始與結(jié)束符號,即:
BEGIN .... END
變量賦值,即:
SET @p_in=1
變量定義:
DECLARE l_int int unsigned default 4000000;
創(chuàng)建mysql存儲過程、存儲函數(shù):
create procedure 存儲過程名(參數(shù))
存儲過程體:
create function 存儲函數(shù)名(參數(shù))
示例:
若是刪除給定球員參加的所有比賽,具體代碼為:
mysql> delimiter $$ #將語句的結(jié)束符號從分號;臨時(shí)改為兩個(gè)$$(可以為自定義)
mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)
-> BEGIN
-> DELETE FROM MATCHES
-> WHERE playerno = p_playerno;
-> END$$
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter; #將語句的結(jié)束符號恢復(fù)為分號
以上就是小編的分享了,希望能夠幫助到大家。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com