MySQL存儲過程/存儲過程與自定義函數的區別


語法:

創建存儲過程:

CREATE [definer = {user|current_user}] PROCEDURE sp_name ([ proc_parameter [,proc_parameter ...]]) [ characteristics..] routime_body

其中:

proc_parameter : [IN|OUT|INOUT] parameter_name type

其中IN表示輸入參數,OUT表示輸出參數,INOUT表示既可以輸入也可以輸出;param_name表示參數名稱;type表示參數的類型

存儲過程體中可以使用自定義函數(UDF)中使用的復合結構/流程控制/SQL語句/自定義變量等等內容,詳情參閱 MySQL自定義函數用法詳解-復合結構自定義變量/流程控制

調用存儲過程:

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

CALL sp_name 

說明:當無參時,可以省略"()",當有參數時,不可省略"()"

存儲過程修改:

ALTER語句修改存儲過程只能修改存儲過程的注釋等無關緊要的東西,不能修改存儲過程體,所以要修改存儲過程,方法就是刪除重建!

刪除存儲過程:

DROP PROCEDURE [IF EXISTS] sp_name

示例:

創建無參存儲過程:

delimiter //
CREATE PROCEDURE showTime()
BEGIN
SELECT now();
END//
delimiter ;

CALL showTime;

作用:顯示當前時間,沒什么實際意義

創建含參存儲過程:

只有一個IN參數

delimiter //
CREATE PROCEDURE seleById(IN uid SMALLINT UNSIGNED)
BEGIN
SELECT * FROM son WHERE id = uid;
END//
delimiter ;

call seleById(2);

包含IN參數和OUT參數

delimiter //
CREATE PROCEDURE deleteById(IN uid SMALLINT UNSIGNED, OUT num SMALLINT UNSIGNED)
BEGIN
DELETE FROM son WHERE id = uid;
SELETE row_count() into num;
END//
delimiter ;

call seleById(2,@changeLine);
SELETE @changeLine;

說明:創建存儲過程deleteById,包含一個IN參數和一個OUT參數.調用時,傳入刪除的ID和保存被修改的行數值的用戶變量@changeLine,select @changeLine;輸出被影響行數.

 

存儲過程與自定義函數的區別:

存儲過程實現的過程要復雜一些,而函數的針對性較強;

存儲過程可以有多個返回值,而自定義函數只有一個返回值;

存儲過程一般獨立的來執行,而函數往往是作為其他SQL語句的一部分來使用;
存儲過程存在的必要性(好處):

存儲過程說白了就是把經常使用的SQL語句或業務邏輯封裝起來,預編譯保存在數據庫中,當需要的時候從數據庫中直接調用,省去了編譯的過程.
提高了運行速度;
同時降低網絡數據傳輸量(你覺得傳一堆SQL代碼快,還是傳一個存儲過程名字和幾個參數快???)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM