中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mysql存儲過程有什么作用?如何使用存儲過程?

發布時間:2020-06-01 21:54:49 來源:億速云 閱讀:427 作者:鴿子 欄目:MySQL數據庫

Mysql自5.0起就支持存儲過程,存儲過程通俗的講就是在一段封裝過的SQL,但不僅僅只有SQL那么簡單,通常還會有變量、條件判斷、循環體,游標等。

存儲過程的作用

在很多場景中,需要將多個表的數據處理,來產生新的我們需要的數據。這些多個表的數據并不能通過連接等查詢方式給出,只能通過判斷和循環才能產生。這個時候,就可以利用存儲過程來實現。

此外,存儲過程還有一些好處,比如性能比較高,還有能減少網絡請求。如果不用存儲過程來實現的話,使用php來實現就需要調用多次mysql,產生多次請求。

當然,存儲過程也不是沒有缺點的,它比較哪調式,另外不支持集群。

創建存儲過程

創建存儲過程語法如下:

CREATE PROCEDURE 過程名(參數) 
BEGIN
 過程體
END

關于參數,設置參數語法為

[IN|OUT|INOUT] 參數名 類型

  • IN 表示該變量只能在過程體內使用

  • OUT 表示該變量只能在過程體外使用

  • INOUT 表示在過程體內和體外都能使用

下面,我們來創建一個最簡單的存儲過程。

CREATE PROCEDURE p1(IN x INT) 
BEGIN
  SELECT x;
END;

變量

在MySQL中變量分為全局變量和局部變量。

全局變量以@開頭,無需聲明,直接使用即可,如

SET @name='gwx';

局部變量需要先聲明,局部變量的初始化方法如下:

DECLARE x int DEFAULT 0;

下面我們來完成一個存儲過程:根據路程計算車費,3公里內按6遠計算,超過的距離按每公里1.2元計算.

-- distance 路程
CREATE PROCEDURE p1(in distance FLOAT)
BEGIN
  DECLARE d_money FLOAT DEFAULT 0; 
    IF distance>3 THEN 
       SET d_money=6+(distance-3)*1.2;
    ELSE
      SET d_money=6;
    END IF;
    SELECT d_money;
END;

游標

拿php做比較,游標有點想foreach,每次循環獲取一條記錄。

定義一個游標:

declare 游標名 CURSOR FOR SELECT 語句

開啟關閉游標:

  • open 游標名

  • close 游標名

取游標數據:

FETCH 游標名 INTO 變量名

可以這么簡單的介紹,大家會有疑惑,不清楚應該如何去使用。下面,來看一個實例,從實例中學習如何使用游標。

用游標完成一個非常簡單的功能,將test_cursor表中數字全部累加起來。

CREATE TABLE IF NOT EXISTS test_cursor(
  num1 INT(10) UNSIGNED NOT NULL DEFAULT 0,
  num2 INT(10) UNSIGNED NOT NULL DEFAULT 0
);    
INSERT INTO test_cursor(num1,num2) VALUES(1,1),(2,2),(3,3);
 
CREATE PROCEDURE `test_cursor`()
BEGIN
    DECLARE sum INT(10) DEFAULT 0;
    DECLARE n1,n2 INT(10);
    DECLARE done INT DEFAULT 0;
    
    DECLARE cur CURSOR FOR SELECT num1,num2 FROM test_cursor; 
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1; 
    
    OPEN cur; -- 打開游標
    WHILE done=0 DO      
        FETCH cur INTO n1,n2;
        
        IF done=0 THEN -- 注意這里為什么加IF條件,不加的話,最后一個值會被多加一遍         
      SET sum=sum+n1+n2;
        END IF;
    END WHILE;
    CLOSE cur;  -- 關閉游標
    
    SELECT sum;
END

這里有幾點需要注意,首先局部變量的定義必須要在聲明游標前聲明。

另外,這里DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1; 表示游標結束后將done設置為1,以結束循環。

以上就是Mysql存儲過程應用的詳細內容,更多請關注億速云其它相關文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平安县| 河曲县| 山阳县| 略阳县| 融水| 休宁县| 驻马店市| 吕梁市| 德阳市| 喀喇| 新宾| 舟山市| 延长县| 南木林县| 黔东| 鄂尔多斯市| 于田县| 科尔| 雷波县| 若尔盖县| 金寨县| 十堰市| 尤溪县| 南召县| 景德镇市| 和龙市| 房山区| 旬阳县| 兴山县| 新沂市| 视频| 攀枝花市| 永修县| 崇信县| 宁德市| 寿阳县| 丹棱县| 成安县| 宁津县| 平山县| 宿州市|