在實際工作中可能會碰到這樣的需求,我經常會進行一些操作,這些操作是固定的,但是每次操作都要寫幾十條語句,如何解決這個問題呢?那就跟著老韓學習mysql存儲過程把,學完了之後這個問題迎刃而解,Let's go。
一、概念;
存儲過程(Stored Procedure)是在大型資料庫系統中,一組為了完成特定功能的SQL 語句集,它存儲在資料庫中,一次編譯後永久有效,用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是資料庫中的一個重要對象。
二、存儲過程優點;
1、優點;
存儲過程可封裝,並隱藏複雜的商業邏輯。
存儲過程可以回傳值,並可以接受參數。
存儲過程無法使用 SELECT 指令來運行,因為它是子程序,與查看表,數據表或用戶定義函數不同。
存儲過程可以用在數據檢驗,強制實行商業邏輯等。
執行效率高。
三、存儲過程和函數的區別;
有不少初學者朋友分不清存儲過程和函數,覺得函數和存儲過程好像沒有什麼區別,
1、存儲過程;
用於在資料庫中完成特定的操作或者任務(如插入、刪除等);
程序頭部聲明用procedure;
程序頭部聲明時不需描述;
返回類型可以使用in/out/in out 三種模式的參數;
作為一個獨立個體執行(使用關鍵字call後面跟存儲過程名字來執行);
可以通過out/in out 返回零個或多個值;
SQL語句(DML 或SELECT)中不可調用存儲過程(作為一個獨立個體執行可看出);
2、函數;
用於特定的數據處理(如獲取今天的日期);
程序頭部聲明用function;
程序頭部聲明時要描述返回類型,而且PL/SQL塊中至少要包括一個有效的return語句;
可以使用in/out/in out 三種模式的參數;
不能獨立執行,必須作為表達式的一部分調用;
通過return語句返回一個值,且改值要與聲明部分一致,也可以是通過out類型的參數帶出的變量;
SQL語句(DML 或SELECT)中可以調用函數;
四、如何自己創建一個存儲過程;
標準寫法:
create procedure 存儲過程名稱( in/out/intout)
begin
語句(可多個語句)
end
1、無參的存儲過程;
2、有參數的存儲過程;
3、有返回值的存儲過程;
4、有參數和返回值的存儲過程;
五、執行、更新、刪除存儲過程
1、執行存儲過程;
執行存儲過程使用call來調用,如上面的四個例子中,第一個就是call del;
有參的調用方法為call ad(6);該語句會自動列印total的值,因為在存儲過程中最後一個語句是select total,相當於給total的值查詢了出來;
有返回值的存儲過程可以使用call add(6,@sum),想得到out的值,需要再跟一個select @sum,相當於我傳入了一個參數6,同時聲明一個變量@sum來接收返回值,最後select @sum查詢返回值的值;
有參數和返回值的存儲過程調用方法為set @nub = 6;call plus(@nub),select @nub,相當於我先聲明一個變量等於6,把變量傳入之後進行運算,相當於給這個變量重新賦值,然後再查詢這個變量的值。
2、更新存儲過程;
ALTER PROCEDURE <過程名> [ <特徵> … ]
3、刪除存儲過程;
drop procedure 存儲過程名字;
存儲過程就講完了,當然老韓講的都是很簡單的存儲過程,帶參數的存儲過程老韓說心裡話還沒有用過,前面老韓講了一個年假自動更新的操作大家還記得嗎?就是每天24:00定時執行一個操作,判斷人員入職滿一年就自動累加年假天數的需求,這個其實就是存儲過程和定時器聯合使用的案例,存儲過程還支持嵌套,就是存儲過程中可以嵌套存儲過程,很多時候只要邏輯上沒問題都是可以的,希望大家能理解基礎的,在基礎上延伸,去提升。
今天的內容就到這裡,沒有關注的朋友可以點一下關注,你們每一次的關注、轉發、收藏都是老韓持續更新的動力,謝謝觀看,我們下期觸發器再見。