Mysql(10)_存儲過程與流程控制
一 存儲過程與if語句
-- ---------------------------- -- Procedure structure for `proc_adder` -- ---------------------------- DROP PROCEDURE IF EXISTS `proc_adder`; DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_adder`(IN a int, IN b int, OUT sum int) BEGIN #Routine body goes here...DECLARE c int; if a is null then set a = 0; end if; if b is null then set b = 0; end if; set sum = a + b; END $$ DELIMITER ; SET @b=5; -- 把5傳給第二個參數b CALL proc_adder(2,@b,@s); -- 調用存儲過程 SELECT @s as sum; CALL proc_adder(3,3,@s); SELECT @s as sum;
------------------------------ -- Procedure structure for `proc_adder` -- ---------------------------- DROP PROCEDURE IF EXISTS `proc_if`; DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_if`(IN type int) BEGIN #Routine body goes here... DECLARE c VARCHAR(500); IF type =0 THENSET c= ‘param is 0‘; ELSEIF type = 1 THEN SET c=‘param is 1‘; ELSE SET c=‘param is others,not 0 or 1‘; END IF; SELECT c; END $$ DELIMITER ; SET @type =1; CALL proc_if(@type)
二 存儲過程與case語句
-- ---------------------------- -- Procedure structure for `proc_adder` -- ---------------------------- DROP PROCEDURE IF EXISTS `proc_case`; DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_case`(IN type int) BEGIN #Routine body goes here... DECLARE c VARCHAR(500); CASE type WHEN 0 THEN SET c=‘param is 0‘; WHEN 1 THEN SET c = ‘param is 1‘; ELSE SET c = ‘param is others,not 0 or 1‘; END CASE; SELECT c; END $$ DELIMITER ; SET @type =1; CALL proc_case(@type)
三 存儲過程與while
-- ---------------------------- -- Procedure structure for `proc_adder` -- ---------------------------- DROP PROCEDURE IF EXISTS `proc_while`; DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_while`(IN n int) BEGIN #Routine body goes here... DECLARE i INT ; DECLARE s INT ; SET i = 0; SET s = 0; WHILE i <= n DO SET s = s+i; SET i = i+1; END WHILE; SELECT s; END $$ DELIMITER ; SET @n =100; CALL proc_while(@n);
存儲過程其實類似於編程語言中的函數,mysql中也有函數,區別在於函數必須有返回值,而存儲過程沒有。存儲過程的參數有in,out,inout類型,而函數的參數只能是in類型的。如有函數需要從其他類型的數據庫遷移到mysql,那麽可能需要將函數改造成存儲過程。
存儲過程和函數是從mysql5.0開始支持的。存儲過程和函數是事先經過編譯並存儲在數據庫中的一段sql語句的集合,調用存儲過程和函數可以簡化應用開發r人員的很多工作,減少數據在數據庫和應用服務器之間的傳輸,對提高數據的處理效率是有好處的
有輸入輸出參數,可以聲明變量,有if/else, case,while等控制語句,通過編寫存儲過程,可以實現復雜的邏輯功能;
函數的普遍特性:模塊化,封裝,代碼復用;
速度快,只有首次執行需經過編譯和優化步驟,後續被調用可以直接執行,省去以上步驟;
對於mysql的表,能存儲多少數據的問題。在工作中遇到過,兩千萬是可以的!,不過在插入兩千萬數據的表,或者是刪除數據,花費的時間比較長。這個在工作也遇到過。
對於mysql和Oracle的比較。其實mysql學好了,Oracle也就學好了。很多東西幾乎是一樣的。而且mysql是開源的,安裝後大概153M
而oracle卻好幾個G。運行oracle,需要很好的設備來支撐它的性能,其實一般的企業,用mysql足夠了!!!如果只是針對幾百人的用戶系統,mysql完全可以滿足需要。
平心而論,自己對於mysql數據庫,了解多少!!!很多東西需要學習,自己會的只是基礎。等以後用到,一些語句,翻翻博客套用就可以了。平時多看自己寫的博客,復習。知道有這麽回事!!!
Mysql(10)_存儲過程與流程控制