MySQL存儲過程

MySQL存儲過程

一.什麼是存儲過程

存儲過程是在大型數據庫系統中,一組爲了完成特定功能的sql語句集,存儲在數據庫中。經過第一次編譯後再次調用不需要再次編譯,用戶通過指定存儲過程的名字和參數來執行它。

二.存儲過程的優點

  1. 存儲過程只在創造時編譯,以後每次執行存儲過程都不需要再重新進行編譯,而一般的sql語句每執行一次就需要編譯一次,所有存儲過程可以提高數據庫的執行速度。
  2. 當對數據庫進行復雜操作時,可將此複雜操作用存儲過程進行封裝,與數據庫提供的事物處理結合一起使用。
  3. 存儲過程可以重複使用,減少開發人員的工作量。
  4. 安全性高,可指定特定用戶對指定的存儲過程的使用權。

三.創建存儲過程

基本語法:

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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章