前言
日常開發中,可能會用到數據庫的自定義函數/存儲過程,本文記錄MySQL對自定義函數與存儲過程的創建、使用、刪除的使用
通用語法
事實上,可以認為存儲過程就是沒有返回值的函數,創建/使用/刪除都非常相似,在Navicat可視化工具中,自定義函數/存儲過程都歸類為函數
定義變量
-- 定義變量,以及賦默認值0 DECLARE c INT(2) DEFAULT(0);
設置變量
-- 設置變量值 SET c = c + 1;
流程控制
-- 流程控制,多條件使用 AND/OR IF c < 0 OR c = 0 THEN set c = 0; ELSEIF c IS NULL THEN set c = 0; ELSE set c = c; END IF;
循環語句
-- 循環語句 WHILE c <= 10 DO SET c = c + 1; END WHILE;
自定義函數
創建
-- 創建函數 DROP FUNCTION IF EXISTS test_fun; CREATE FUNCTION test_fun ( a INT(2), b INT(2) ) RETURNS INT(2) BEGIN -- 定義變量,以及賦默認值 DECLARE c INT(2) DEFAULT(0); DECLARE i INT(2) DEFAULT(1); -- 流程控制 IF a < 0 OR b < 0 THEN set a = 0; set b = 0; ELSEIF a IS NULL AND b IS NULL THEN set a = 0; set b = 0; ELSE set a = a; set b = b; END IF; -- 設置變量值 SET c = a + b; -- 循環 WHILE i <= 10 DO SET c = c + i; SET i = i + 1; END WHILE; -- return返回值 RETURN c; END;
使用
-- 使用函數 SELECT test_fun ( 1, 2 );
刪除
-- 刪除函數 DROP FUNCTION test_fun;
存儲過程
創建
-- 創建存儲過程 DROP PROCEDURE IF EXISTS test_pro; CREATE PROCEDURE test_pro ( a INT(2), b INT(2) ) BEGIN -- 定義變量,以及賦默認值 DECLARE c INT(2) DEFAULT(0); -- 流程控制 IF a < 0 OR b < 0 THEN set a = 0; set b = 0; ELSEIF a IS NULL AND b IS NULL THEN set a = 0; set b = 0; ELSE set a = a; set b = b; END IF; -- 設置變量值 SET c = a + b; -- 關閉自動提交,mysql每次執行一條語句都默認自動提交,去掉自動提交可大大提高批量操作性能 SET autocommit = 0; -- 循環 WHILE c <= 10 DO -- 執行SQL語句,獲取1-4隨機數 SELECT floor( 1 + rand() * 4 ); SET c = c + 1; END WHILE; -- 開啟自動提交 SET autocommit = 1; -- 模擬返回值,存儲過程不能return SELECT c; END;
使用
-- 使用存儲過程 CALL test_pro ( 1, 2 );
刪除
-- 刪除存儲過程 DROP PROCEDURE test_pro;
后記
MySQL對自定義函數與存儲過程的創建、使用、刪除的使用暫時先記錄到這,后續再進行補充