MySQL存儲過程
一.什麼是存儲過程
存儲過程是在大型數據庫系統中,一組爲了完成特定功能的sql語句集,存儲在數據庫中。經過第一次編譯後再次調用不需要再次編譯,用戶通過指定存儲過程的名字和參數來執行它。
二.存儲過程的優點
- 存儲過程只在創造時編譯,以後每次執行存儲過程都不需要再重新進行編譯,而一般的sql語句每執行一次就需要編譯一次,所有存儲過程可以提高數據庫的執行速度。
- 當對數據庫進行復雜操作時,可將此複雜操作用存儲過程進行封裝,與數據庫提供的事物處理結合一起使用。
- 存儲過程可以重複使用,減少開發人員的工作量。
- 安全性高,可指定特定用戶對指定的存儲過程的使用權。
三.創建存儲過程
基本語法:
create procedure 存儲過程名(參數,參數....)
begin
// 代碼
end$
存儲過程中的參數分爲輸入參數(in),輸出參數(out)和輸入輸出參數(inout),默認是輸入參數。如果存儲過程中只有一條語句begin和end可以省略。
例1:查詢表中數據一條語句
create procedure p1()
begin
select * from t_user;
end
調用存儲過程:
call p1();
例2:輸入一個值如果大於等於22則查詢大於22歲的用戶,不然就查詢小於22歲的用戶
create procedure p2(age int(10))
begin
if age >= 22 then
select * from t_user t where t.age >= 22;
else
select * from t_user t where t.age < 22;
end if;
end
調用存儲過程:
call p2(10);
四.帶有輸入和輸出的存儲過程
創建存儲過程:
create procedure p3(in n int , out res int)
begin
set res = n*n;
end
調用存儲過程:
set @res = 0;call p3(10,@res);select @res;
結果:
五.刪除存儲過程
drop procedure [if exists ]存儲過程名
六.向表中插入1000萬條數據做壓力測試
1.新建一張bigdata表,裏面只有一個number字段
create table bigdata(number int);
2.創建一個存儲過程向表中插數據
DELIMITER $$
CREATE PROCEDURE insert_bigdata (IN startnum INT, IN num INT)
BEGIN
DECLARE i INT DEFAULT 0 ;
SET autocommit = 0 ;
REPEAT
SET i = i + 1 ;
INSERT INTO bigdata (number)VALUES(startnum + i) ;
UNTIL i = num
END REPEAT ;
COMMIT ;
END $$
3.調用存儲過程向表中插數據
call insert_bigdata(100,500000);