mysql之存儲過程


 

 

 

 

1.存儲過程

1.1體會封裝

(1)創建一個存儲過程

create PROCEDURE p1() -- 聲明一個存儲過程,begin和end之間就是sql語句的集合。
BEGIN
    insert into goods VALUES(null, 'why', '50');
    select * from goods;
END

(2)調用存儲過程,之后想要使用begin和end之間的sql語句,就可以像調函數一樣使用

-- 調用存儲過程,執行了創建存儲過程時begin和end之間的語句
call p1();

1.2體會參數

(1)

-- 三個參數類型
    -- in 表示參數只能傳進來,輸入型參數
    -- out 表示輸出型參數
    -- inout 表示輸入輸出型參數
-- 默認不給參數參數類型則是in輸入型參數
create PROCEDURE p2(in i int, inout names VARCHAR(50)) -- 聲明一個存儲過程,帶參數的,in表示輸入型參數,i為參數名,int為i這個參數的數據類型
BEGIN                                                                                                    -- 參數2:inout表示輸入輸出型參數,names是參數名,varchar(50)表示names這個參數的數據類型是字符串格式的長度最長為50
    update goods set name = names where id = i;
    select names;    -- 查詢看一下names這個變量的值
   select name into names from goods where id = 1; -- into的意思是將查詢出來的name值賦值給names這個變量
END set @names = '大鵝'; -- 定義一個變量names,賦值為大鵝,目的是給下面的調用用 call p2(4, @names); -- 調用p2這個存儲過程,因為第二個參數是inout輸入輸出型參數,所以一定要進來一個之前被set過的變量,並加@,其實就像C語言中的指針。 select @names; -- 查看一下這個names參數被帶出來的值 大鵝

 

 (2)into關鍵字只能將查詢出來的一個值賦值給一個變量,不能查詢出來多個賦值給多個變量

 1.3體會控制

-- 如果flag為true則查詢goods表中比nums小商品記錄
-- 如果flag為false則查詢goods表中比nums大的商品記錄
-- if 條件結束后要加end if,判斷是否相等要用=號而不是==
create PROCEDURE p(int flag char(5), in nums int)
BEGIN
    if flag = 'true' THEN
        select * from goods where num < nums;
    ELSEIF flag = 'false' THEN
        select * from goods where num > nums;
    ELSE
        select * from goods;
    end if;
END


call p('true', 20);

 

1.4 體會循環,使用存儲過程做1 ~ 100的累加和

create PROCEDURE p4(in count int, out result_sum int)
BEGIN
        declare i int DEFAULT 0; -- 使用declare聲明一個變量i,默認值是0
        DECLARE sum int;
        set sum = 0;    -- 使用set設置sum這個變量的值為0
        while i <= count DO
            set sum = sum + i;
            set i = i + 1;
        end WHILE;
        set result_sum = sum;    -- 設置result_sum = sum
END

set he = 0;
call p4(100, @he);
select @he;

1.5查看和刪除存儲過程

show PROCEDURE status; -- 查看當前創建的存儲過程

drop PROCEDURE p4;    -- 刪除p4存儲過程

如果存儲過程寫錯了,在命令行下只能刪除這個存儲過程,然后在重新創建一個來達到修改的目的。如果是在Navicat for mysql可視化ide中,則可以在函數中,設計函數來改存儲過程的邏輯代碼。

 

 

 

存儲過程建議sql語句在幾百行左右才會用,並且跟賬目相關的特別嚴謹的才會用到存儲過程,普通的項目應該是用不到

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM