主頁(yè) > 知識(shí)庫(kù) > MYSQL存儲(chǔ)過(guò)程即常用邏輯知識(shí)點(diǎn)總結(jié)

MYSQL存儲(chǔ)過(guò)程即常用邏輯知識(shí)點(diǎn)總結(jié)

熱門(mén)標(biāo)簽:美國(guó)反騷擾電話(huà)機(jī)器人 悟空科技電話(huà)機(jī)器人 真人語(yǔ)音電話(huà)機(jī)器人 福建外呼系統(tǒng)定制化 400電話(huà)可以免費(fèi)申請(qǐng)嗎 怎么在地圖標(biāo)注位置生成圖片 銅陵防封電銷(xiāo)卡 騰訊地圖標(biāo)注提升 電銷(xiāo)卡外呼系統(tǒng)供應(yīng)商

Mysql存儲(chǔ)過(guò)程

1.創(chuàng)建存儲(chǔ)過(guò)程語(yǔ)法(格式)

DELIMITER $
CREATE PROCEDURE 存儲(chǔ)過(guò)程名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ù)類(lèi)型(INT,VARCHAR,DOUBLE,........)
  • OUT 代表存儲(chǔ)過(guò)程執(zhí)行完返回的數(shù)據(jù),定義參數(shù)名,并且后面跟上參數(shù)類(lèi)型(INT,VARCHAR,DOUBLE,........)
  • INOUT 代表既可以傳入也可以返回 ,定義參數(shù)名,并且后面跟上參數(shù)類(lèi)型(INT,VARCHAR,DOUBLE,........)

2.存儲(chǔ)過(guò)程內(nèi)具體語(yǔ)法與邏輯

A.定義變量語(yǔ)法:

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

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

B.變量賦值:

方式1(直接對(duì)變量進(jìn)行賦值):

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

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

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

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

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

c.邏輯判斷:

#IF判斷:    

      IF 條件語(yǔ)句(3>5) THEN
         條件為T(mén)RUE時(shí)執(zhí)行.........;
      END IF;
  #IF ELSE判斷:
      IF 條件(a>0) THEN
        條件為(a>0)時(shí)執(zhí)行........;
      ELSE IF 條件(a0) THEN
         條件為(a0)時(shí)執(zhí)行.......;
      ELSE
         其它執(zhí)行.......;
      END IF;

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

#例.單游標(biāo)循環(huán):create procedure my_procedure() -- 創(chuàng)建存儲(chǔ)過(guò)程
begin -- 開(kāi)始存儲(chǔ)過(guò)程
declare my_id varchar(32); -- 自定義變量1
declare my_name varchar(50); -- 自定義變量2
DECLARE done INT DEFAULT FALSE; -- 自定義控制游標(biāo)循環(huán)變量,默認(rè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é)束自動(dòng)轉(zhuǎn)true
 
OPEN cur; -- 打開(kāi)游標(biāo)
 posLoop: LOOP -- 開(kāi)始循環(huán)體,myLoop為自定義循環(huán)名,結(jié)束循環(huán)時(shí)用到
  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é)束存儲(chǔ)過(guò)程
#例.多游標(biāo)循環(huán):create procedure my_procedure() -- 創(chuàng)建存儲(chǔ)過(guò)程begin -- 開(kāi)始存儲(chǔ)過(guò)程
declare my_id varchar(32); -- 自定義變量1
declare my_name varchar(50); -- 自定義變量2
DECLARE done INT DEFAULT FALSE; -- 自定義控制游標(biāo)循環(huán)變量,默認(rè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é)束自動(dòng)轉(zhuǎn)true
 
OPEN cur_1; -- 打開(kāi)游標(biāo)
 posLoop: LOOP -- 開(kāi)始循環(huán)體,myLoop為自定義循環(huán)名,結(jié)束循環(huán)時(shí)用到
  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;  -- 因?yàn)楫?dāng)?shù)谝粋€(gè)游標(biāo)遍歷完后其值被handler設(shè)置為T(mén)RUE了,如果不用set把它設(shè)置為 FALSE ,那么第二個(gè)游標(biāo)就不會(huì)遍歷了。(最好是在每個(gè)打開(kāi)游標(biāo)的操作前都用該語(yǔ)句,以確保游標(biāo)能真正遍歷)
  
OPEN cur_2; -- 打開(kāi)游標(biāo)
 posLoop_2: LOOP -- 開(kāi)始循環(huán)體,myLoop為自定義循環(huán)名,結(jié)束循環(huán)時(shí)用到
  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é)束存儲(chǔ)過(guò)程

3.存儲(chǔ)過(guò)程的調(diào)用

#調(diào)用沒(méi)有返回值的存儲(chǔ)過(guò)程CALL 存儲(chǔ)過(guò)程名(參數(shù).....);

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

CALL 存儲(chǔ)過(guò)程名(@aaa);
SELECT @aaa;

4.刪除存儲(chǔ)過(guò)程

DROP PROCEDURE 存儲(chǔ)過(guò)程名; 

5.注意事項(xiàng)

存儲(chǔ)過(guò)程中的分號(hào)(;)很重要,盡量不要省略。

您可能感興趣的文章:
  • 深入了解Mysql邏輯架構(gòu)
  • MySQL高級(jí)學(xué)習(xí)筆記(三):Mysql邏輯架構(gòu)介紹、mysql存儲(chǔ)引擎詳解
  • 詳解MySQL執(zhí)行原理、邏輯分層、更改數(shù)據(jù)庫(kù)處理引擎
  • Mysql邏輯架構(gòu)詳解
  • 關(guān)于避免MySQL替換邏輯SQL的坑爹操作詳解
  • 利用PHP訪問(wèn)MySql數(shù)據(jù)庫(kù)的邏輯操作以及增刪改查的實(shí)例講解
  • MySql存儲(chǔ)過(guò)程之邏輯判斷和條件控制
  • MySQL 利用frm文件和ibd文件恢復(fù)表數(shù)據(jù)
  • MySQL使用binlog日志做數(shù)據(jù)恢復(fù)的實(shí)現(xiàn)
  • MySQL 基于時(shí)間點(diǎn)的快速恢復(fù)方案
  • MySQL5.7 mysqldump備份與恢復(fù)的實(shí)現(xiàn)
  • MySQL 邏輯備份與恢復(fù)測(cè)試的相關(guān)總結(jié)

標(biāo)簽:湖北 湖南 烏海 云浮 武威 聊城 白銀 臨汾

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MYSQL存儲(chǔ)過(guò)程即常用邏輯知識(shí)點(diǎn)總結(jié)》,本文關(guān)鍵詞  MYSQL,存儲(chǔ),過(guò)程,即,常用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MYSQL存儲(chǔ)過(guò)程即常用邏輯知識(shí)點(diǎn)總結(jié)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于MYSQL存儲(chǔ)過(guò)程即常用邏輯知識(shí)點(diǎn)總結(jié)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章