開心生活站

位置:首頁 > IT科技 > 

mysql存儲過程實例詳解

IT科技6.67K

mysql中存儲過程是屬於一種在數據庫中存儲複雜程序,以便於外部程序調用的一種數據庫對象。

存儲過程一般來說是爲了完成特定功能的SQL語句集,經過編譯後創建並保存在數據庫中,用戶可以通過指定存儲過程的名字並給定參數(通常是在需要時)來進行調用執行。

mysql存儲過程優點:

1、存儲過程可以進行封裝,並且隱藏複雜的商業邏輯。

2、存儲過程能夠回傳值,並能接受參數。

3、存儲過程通常是無法使用SELECT指令來進行運行的,由於它是屬於子程序,與查看表、數據表或是用戶定義函數不同。

4、存儲過程能夠用於數據檢驗,強制實行商業邏輯等。

當然,它也存在了一部分缺點:

1、存儲過程一般是定製化於特定的數據庫上,因爲其所支持的編程語言不同。當切換到了其他廠商的數據庫系統時,就需要重寫原有的存儲過程了。

2、存儲過程的性能調校與撰寫,一般會受限於各種數據庫系統。

mysql存儲過程實例詳解

參考示例:

存儲過程的操作,具體代碼如下:

創建:

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'

調用:

CALL sp_name([parameter[,...]])

刪除:

DROP PROCEDURE sp_name

查看:

show PROCEDURE STATUS [like 'pattern']

SHOW CREATE PROCEDURE sp_name

mysql存儲過程實例詳解 第2張

在MYSQL 存儲過程中的關鍵語法:

聲明語句結束符,可自定義爲:

DELIMITER $$

DELIMITER //

聲明存儲過程,即:

CREATE PROCEDURE demo_in_parameter(IN p_in int)       

存儲過程開始與結束符號,即:

BEGIN .... END    

變量賦值,即:

SET @p_in=1  

變量定義:

DECLARE l_int int unsigned default 4000000; 

創建mysql存儲過程、存儲函數:

create procedure 存儲過程名(參數)

存儲過程體:

create function 存儲函數名(參數)

示例:

若是刪除給定球員參加的所有比賽,具體代碼爲:

mysql> delimiter $$  #將語句的結束符號從分號;臨時改爲兩個$$(可以爲自定義)

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;  #將語句的結束符號恢復爲分號

標籤:mysql 存儲 實例