最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MYSQL存儲過程即常用邏輯知識點總結(jié)

 更新時間:2019年08月29日 15:54:35   作者:MoMing  
在本篇文章里小編給大家整理的是關(guān)于MYSQL存儲過程即常用邏輯知識點,有需要的朋友們可以學(xué)習(xí)下。

Mysql存儲過程

1.創(chuàng)建存儲過程語法(格式)

DELIMITER $
CREATE PROCEDURE 存儲過程名A(IN 傳入?yún)?shù)名a INT,IN 傳入?yún)?shù)名b VARCHAR(20),OUT 返回參數(shù)名c INT)
BEGIN
  內(nèi)容..........
END $

解析:

  • IN 代表傳入的參數(shù),定義傳入?yún)?shù)名,并且后面跟上傳入?yún)?shù)類型(INT,VARCHAR,DOUBLE,........)
  • OUT 代表存儲過程執(zhí)行完返回的數(shù)據(jù),定義參數(shù)名,并且后面跟上參數(shù)類型(INT,VARCHAR,DOUBLE,........)
  • INOUT 代表既可以傳入也可以返回 ,定義參數(shù)名,并且后面跟上參數(shù)類型(INT,VARCHAR,DOUBLE,........)

2.存儲過程內(nèi)具體語法與邏輯

A.定義變量語法:

DECLARE 變量名a 參數(shù)類型(INT,VARCHAR(20),BOOLEAN,........) [DEFAULT NULL];

注:可以在參數(shù)類型后面加 DEFAULT NULL; 來設(shè)置初始值。

B.變量賦值:

方式1(直接對變量進行賦值):

SET 定義的變量a = NEW();

方式2(sql查詢的結(jié)果直接賦值給變量):

SELECT `student`.age INTO 定義的變量a FROM `student` WHERE...........

方式3(sql查詢的結(jié)果直接賦值給多個變量):

SELECT `student`.name AS 定義的變量a,`student`.age AS 定義的變量b INTO 定義的變量a,定義的變量b FROM `student` ...............

c.邏輯判斷:

#IF判斷:    

      IF 條件語句(3>5) THEN
         條件為TRUE時執(zhí)行.........;
      END IF;
  #IF ELSE判斷:
      IF 條件(a>0) THEN
        條件為(a>0)時執(zhí)行........;
      ELSE IF 條件(a<0) THEN
         條件為(a<0)時執(zhí)行.......;
      ELSE
         其它執(zhí)行.......;
      END IF;

D.游標(biāo),(LOOP)循環(huán):

#例.單游標(biāo)循環(huán):create procedure my_procedure() -- 創(chuàng)建存儲過程
begin -- 開始存儲過程
declare my_id varchar(32); -- 自定義變量1
declare my_name varchar(50); -- 自定義變量2
DECLARE done INT DEFAULT FALSE; -- 自定義控制游標(biāo)循環(huán)變量,默認false

DECLARE cur CURSOR FOR ( SELECT id, name FROM t_people ); -- 定義游標(biāo)并輸入結(jié)果集
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 綁定控制變量到游標(biāo),游標(biāo)循環(huán)結(jié)束自動轉(zhuǎn)true
 
OPEN cur; -- 打開游標(biāo)
 posLoop: LOOP -- 開始循環(huán)體,myLoop為自定義循環(huán)名,結(jié)束循環(huán)時用到
  FETCH cur into my_id, my_name; -- 將游標(biāo)當(dāng)前讀取行的數(shù)據(jù)順序賦予自定義變量12
     IF done THEN -- 判斷是否繼續(xù)循環(huán)
        LEAVE posLoop; -- 結(jié)束循環(huán)
    END IF;
  -- 自己要做的事情,在 sql 中直接使用自定義變量即可
  UPDATE t_user SET c_name = my_name WHERE id = my_id and rtrim(ltrim(c_name)) = ''; -- 左右去空格
 
  COMMIT; -- 提交事務(wù)
 END LOOP posLoop; -- 結(jié)束自定義循環(huán)體
 CLOSE cur; -- 關(guān)閉游標(biāo)
END; -- 結(jié)束存儲過程
#例.多游標(biāo)循環(huán):create procedure my_procedure() -- 創(chuàng)建存儲過程begin -- 開始存儲過程
declare my_id varchar(32); -- 自定義變量1
declare my_name varchar(50); -- 自定義變量2
DECLARE done INT DEFAULT FALSE; -- 自定義控制游標(biāo)循環(huán)變量,默認false

DECLARE cur_1 CURSOR FOR ( SELECT id, name FROM t_people ); -- 定義游標(biāo)并輸入結(jié)果集
DECLARE cur_2 CURSOR FOR ( SELECT id_2,name_2 FROM t_people_2); --定義游標(biāo)并輸入結(jié)果集

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 綁定控制變量到游標(biāo),游標(biāo)循環(huán)結(jié)束自動轉(zhuǎn)true
 
OPEN cur_1; -- 打開游標(biāo)
 posLoop: LOOP -- 開始循環(huán)體,myLoop為自定義循環(huán)名,結(jié)束循環(huán)時用到
  FETCH cur_1 into my_id, my_name; -- 將游標(biāo)當(dāng)前讀取行的數(shù)據(jù)順序賦予自定義變量12
     IF done THEN -- 判斷是否繼續(xù)循環(huán)
        LEAVE posLoop; -- 結(jié)束循環(huán)
    END IF;
  -- 自己要做的事情,在 sql 中直接使用自定義變量即可
  UPDATE ..........;  --自己要做的具體操作
 END LOOP posLoop; -- 結(jié)束自定義循環(huán)體
 CLOSE cur_1; -- 關(guān)閉游標(biāo)

  SET done = FALSE;  -- 因為當(dāng)?shù)谝粋€游標(biāo)遍歷完后其值被handler設(shè)置為TRUE了,如果不用set把它設(shè)置為 FALSE ,那么第二個游標(biāo)就不會遍歷了。(最好是在每個打開游標(biāo)的操作前都用該語句,以確保游標(biāo)能真正遍歷)
  
OPEN cur_2; -- 打開游標(biāo)
 posLoop_2: LOOP -- 開始循環(huán)體,myLoop為自定義循環(huán)名,結(jié)束循環(huán)時用到
  FETCH cur_2 into my_id, my_name; -- 將游標(biāo)當(dāng)前讀取行的數(shù)據(jù)順序賦予自定義變量12
     IF done THEN -- 判斷是否繼續(xù)循環(huán)
        LEAVE posLoop_2; -- 結(jié)束循環(huán)
    END IF;
  -- 自己要做的事情,在 sql 中直接使用自定義變量即可
  INSERT ..........;   --自己要做的具體操作
 END LOOP posLoop_2; -- 結(jié)束自定義循環(huán)體
 CLOSE cur_2; -- 關(guān)閉游標(biāo)


END; -- 結(jié)束存儲過程

3.存儲過程的調(diào)用

#調(diào)用沒有返回值的存儲過程CALL 存儲過程名(參數(shù).....);

#調(diào)用有返回值的存儲過程(獲得返回值)

CALL 存儲過程名(@aaa);
SELECT @aaa;

4.刪除存儲過程

DROP PROCEDURE 存儲過程名; 

5.注意事項

存儲過程中的分號(;)很重要,盡量不要省略。

相關(guān)文章

  • MySQL中的CONCAT()函數(shù):輕松拼接字符串的利器

    MySQL中的CONCAT()函數(shù):輕松拼接字符串的利器

    這篇文章主要介紹了MySQL中的CONCAT()函數(shù):輕松拼接字符串的利器,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • SQL函數(shù)實現(xiàn)Group_concat用法

    SQL函數(shù)實現(xiàn)Group_concat用法

    GROUP_CONCAT用于將每個分組內(nèi)的值連接成一個字符串,并通過指定的分隔符進行分隔,本文主要介紹了SQL函數(shù)實現(xiàn)Group_concat用法,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • mysql之group by和having用法詳解

    mysql之group by和having用法詳解

    這篇文章主要介紹了mysql之group by和having用法詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • mysql字符串拼接的4種方式總結(jié)

    mysql字符串拼接的4種方式總結(jié)

    MySQL字符串拼接可以使多個字段的值組成一個集合,不僅可以拼接字符串與字符串、空格、特殊符號甚至可以拼接中文文本,下面這篇文章主要給大家介紹了關(guān)于mysql字符串拼接的4種方式,需要的朋友可以參考下
    2023-02-02
  • MySQL提示Truncated incorrect DOUBLE value解決方法

    MySQL提示Truncated incorrect DOUBLE value解決方法

    這篇文章給大家介紹了MySQL提示Truncated incorrect DOUBLE value報錯的四種解決方法,并通過代碼給大家介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2024-02-02
  • MySQL中的悲觀鎖與樂觀鎖

    MySQL中的悲觀鎖與樂觀鎖

    這篇文章主要介紹了MySQL中悲觀鎖與樂觀鎖的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-09-09
  • Centos6.4編譯安裝mysql 8.0.0 詳細教程

    Centos6.4編譯安裝mysql 8.0.0 詳細教程

    這篇文章主要為大家分享了Centos6.4編譯安裝mysql 8.0.0 詳細教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • MySQL性能監(jiān)控軟件Nagios的安裝及配置教程

    MySQL性能監(jiān)控軟件Nagios的安裝及配置教程

    這篇文章主要介紹了MySQL性能監(jiān)控軟件Nagios的安裝及配置教程,這里以CentOS操作系統(tǒng)為環(huán)境進行演示,需要的朋友可以參考下
    2015-12-12
  • 淺析MySQL索引結(jié)構(gòu)采用B+樹的問題

    淺析MySQL索引結(jié)構(gòu)采用B+樹的問題

    數(shù)據(jù)庫的存儲引擎都是采用B樹或者B+樹來實現(xiàn)索引的存儲,總體來說,我認為技術(shù)方案的選型,更多的要根據(jù)具體的業(yè)務(wù)場景來決定,并不一定是說B+樹就是最好的選擇,就像MongoDB里面采用B樹結(jié)構(gòu),本文介紹我對MySQL索引結(jié)構(gòu)采用B+樹的理解
    2022-06-06
  • Mysql 遠程連接配置實現(xiàn)的兩種方法

    Mysql 遠程連接配置實現(xiàn)的兩種方法

    這篇文章主要介紹了Mysql 遠程連接配置實現(xiàn)的兩種方法的相關(guān)資料,需要的朋友可以參考下
    2017-07-07

最新評論

西乌珠穆沁旗| 光山县| 霍山县| 阿鲁科尔沁旗| 凤冈县| 屯留县| 武汉市| 淳化县| 龙岩市| 禹州市| 雅安市| 大姚县| 怀安县| 庄河市| 高清| 安泽县| 香河县| 麦盖提县| 宁德市| 浙江省| 庄河市| 邯郸县| 定西市| 临夏县| 丁青县| 城步| 体育| 那曲县| 武鸣县| 郯城县| 体育| 凯里市| 南靖县| 贵德县| 八宿县| 亳州市| 板桥市| 新兴县| 民和| 安龙县| 江源县|