欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2019年08月29日 15:54:35   作者:MoMing  
在本篇文章里小編給大家整理的是關(guān)于MYSQL存儲過程即常用邏輯知識點(diǎn),有需要的朋友們可以學(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(直接對變量進(jìn)行賦值):

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

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

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

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

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

c.邏輯判斷:

#IF判斷:    

      IF 條件語句(3>5) THEN
         條件為TRUE時(shí)執(zhí)行.........;
      END IF;
  #IF ELSE判斷:
      IF 條件(a>0) THEN
        條件為(a>0)時(shí)執(zhí)行........;
      ELSE IF 條件(a<0) THEN
         條件為(a<0)時(shí)執(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)變量,默認(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é)束自動轉(zhuǎn)true
 
OPEN cur; -- 打開游標(biāo)
 posLoop: LOOP -- 開始循環(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é)束存儲過程
#例.多游標(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)變量,默認(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é)束自動轉(zhuǎn)true
 
OPEN cur_1; -- 打開游標(biāo)
 posLoop: LOOP -- 開始循環(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è)置為TRUE了,如果不用set把它設(shè)置為 FALSE ,那么第二個(gè)游標(biāo)就不會遍歷了。(最好是在每個(gè)打開游標(biāo)的操作前都用該語句,以確保游標(biāo)能真正遍歷)
  
OPEN cur_2; -- 打開游標(biāo)
 posLoop_2: LOOP -- 開始循環(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é)束存儲過程

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

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

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

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

4.刪除存儲過程

DROP PROCEDURE 存儲過程名; 

5.注意事項(xiàng)

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

相關(guān)文章

  • MySQL中Set與Enum的區(qū)別和使用詳解

    MySQL中Set與Enum的區(qū)別和使用詳解

    這篇文章主要介紹了MySQL中Set與Enum的區(qū)別和使用詳解,數(shù)據(jù)庫中的 set 是一種集合數(shù)據(jù)類型,用于存儲不同的元素,每個(gè)元素只能出現(xiàn)一次,Set 的主要作用是方便進(jìn)行集合運(yùn)算,如并集、交集等操作,需要的朋友可以參考下
    2024-01-01
  • Ubuntu 20.04 安裝和配置MySql5.7的詳細(xì)教程

    Ubuntu 20.04 安裝和配置MySql5.7的詳細(xì)教程

    這篇文章主要介紹了Ubuntu 20.04 安裝和配置MySql5.7的相關(guān)資料,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Mysql巧用join優(yōu)化sql的方法詳解

    Mysql巧用join優(yōu)化sql的方法詳解

    這篇文章主要給大家介紹了關(guān)于Mysql巧用join優(yōu)化sql的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 初探SQL語句復(fù)合主鍵與聯(lián)合主鍵

    初探SQL語句復(fù)合主鍵與聯(lián)合主鍵

    這篇文章主要介紹了初探SQL語句復(fù)合主鍵與聯(lián)合主鍵的相關(guān)內(nèi)容,具有一定參考價(jià)值,這里給大家分享下,需要的朋友可以參考。
    2017-10-10
  • Mysql存儲引擎詳解

    Mysql存儲引擎詳解

    存儲引擎其實(shí)就是如何實(shí)現(xiàn)存儲數(shù)據(jù),如何為存儲的數(shù)據(jù)建立索引以及如何更新,查詢數(shù)據(jù)等技術(shù)實(shí)現(xiàn)的方法。本文我們來詳細(xì)探討下MySQL中的幾個(gè)存儲引擎(MyISAM、InnoDB、archive、MERGE)的相關(guān)知識
    2016-12-12
  • Mysql計(jì)算n日留存率的實(shí)現(xiàn)

    Mysql計(jì)算n日留存率的實(shí)現(xiàn)

    本文主要介紹了Mysql計(jì)算n日留存率的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • MySql 設(shè)置表格字段key中的值

    MySql 設(shè)置表格字段key中的值

    本文主要介紹了MySql 設(shè)置表格字段key中的值,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • MySQL 配置文件my.cnf 例子最詳細(xì)翻譯

    MySQL 配置文件my.cnf 例子最詳細(xì)翻譯

    MySQL 配置文件my.cnf 例子最詳細(xì)翻譯,需要的朋友可以看看。
    2009-05-05
  • 一條SQL更新語句的執(zhí)行過程解析

    一條SQL更新語句的執(zhí)行過程解析

    這篇文章主要介紹了一條SQL更新語句的執(zhí)行過程解析,所以一條更新語句的執(zhí)行流程又是怎樣的呢?下面我們一起進(jìn)入文章了解更多具體內(nèi)容吧
    2022-05-05
  • mysql仿asp的數(shù)據(jù)庫操作類

    mysql仿asp的數(shù)據(jù)庫操作類

    使用說明: 該類完全按照ADO的習(xí)慣書寫的,用過ASP的人都覺得ASP連接數(shù)據(jù)庫比PHP好用(這是我的感覺), 但PHP得一個(gè)一個(gè)API地寫,挺累,該類做了完全的封裝 創(chuàng)建類的實(shí)例時(shí)可以指定一個(gè)數(shù)據(jù)庫表和選擇的數(shù)據(jù)庫,如:new MySQLDB("table","database");
    2008-04-04

最新評論