什么是mysql存儲過程?
存儲程序是被存儲在服務(wù)器中的組合SQL語句,經(jīng)編譯創(chuàng)建并保存在數(shù)據(jù)庫中,用戶可通過存儲過程的名字調(diào)用執(zhí)行。存儲過程核心思想就是數(shù)據(jù)庫SQL語言層面的封裝與重用性。使用存儲過程可以較少應(yīng)用系統(tǒng)的業(yè)務(wù)復(fù)雜性,但是會增加數(shù)據(jù)庫服務(wù)器系統(tǒng)的負(fù)荷,所以在使用時需要綜合業(yè)務(wù)考慮。
基本語法格式
CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body
(免費學(xué)習(xí)視頻教程分享:mysql視頻教程)
實例一:計算消費折扣
-- 創(chuàng)建存儲過程 DROP PROCEDURE IF EXISTS p01_discount ; CREATE PROCEDURE p01_discount(IN consume NUMERIC(5,2),OUT payfee NUMERIC(5,2))BEGIN -- 判斷收費方式 IF(consume>100.00 AND consume<=300.00) THEN SET payfee=consume*0.8; ELSEIF (consume>300.00) THEN SET payfee=consume*0.6; ELSE SET payfee = consume; END IF; SELECT payfee AS result;END ; -- 調(diào)用存儲過程 CALL p01_discount(100.0,@discount);
實例二:While..Do寫數(shù)據(jù)
提供一張數(shù)據(jù)表
CREATE TABLE `t03_proced` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID', `temp_name` varchar(20) DEFAULT NULL COMMENT '名稱', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='觸發(fā)器寫數(shù)據(jù)';
存儲程序
根據(jù)傳入的參數(shù),判斷寫入t03_proced表的數(shù)據(jù)條數(shù)。
DROP PROCEDURE IF EXISTS p02_batch_add ; CREATE PROCEDURE p02_batch_add(IN count INT(11))BEGIN DECLARE temp int default 0; WHILE temp < count DO INSERT INTO t03_proced(temp_name) VALUES ('pro_name'); SET temp = temp+1 ; END WHILE; END ; -- 測試:寫入10條數(shù)據(jù)call p02_batch_add(10);
注意事項
1、業(yè)務(wù)場景
存儲過程在實際開發(fā)中的應(yīng)用不是很廣泛,通常復(fù)雜的業(yè)務(wù)場景都在應(yīng)用層面開發(fā),可以更好的管理維護和優(yōu)化。
2、執(zhí)行速度
假如在單表數(shù)據(jù)寫入的簡單場景下,基于應(yīng)用程序?qū)懭?,或者?shù)據(jù)庫連接的客戶端寫入,相比存儲過程寫入的速度就會慢很多,存儲過程在很大程度上沒有網(wǎng)絡(luò)通信開銷,解析開銷,優(yōu)化器開銷等。
相關(guān)文章教程推薦:mysql教程