日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql中的逻辑类型如何定义_MYSQL存储过程即常用逻辑知识点总结

發(fā)布時間:2024/10/12 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql中的逻辑类型如何定义_MYSQL存储过程即常用逻辑知识点总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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; 來設置初始值。

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.游標,(LOOP)循環(huán):

#例.單游標循環(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; -- 自定義控制游標循環(huán)變量,默認false

DECLARE cur CURSOR FOR ( SELECT id, name FROM t_people ); -- 定義游標并輸入結(jié)果集

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 綁定控制變量到游標,游標循環(huán)結(jié)束自動轉(zhuǎn)true

OPEN cur; -- 打開游標

posLoop: LOOP -- 開始循環(huán)體,myLoop為自定義循環(huán)名,結(jié)束循環(huán)時用到

FETCH cur into my_id, my_name; -- 將游標當前讀取行的數(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; -- 提交事務

END LOOP posLoop; -- 結(jié)束自定義循環(huán)體

CLOSE cur; -- 關閉游標

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

#例.多游標循環(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; -- 自定義控制游標循環(huán)變量,默認false

DECLARE cur_1 CURSOR FOR ( SELECT id, name FROM t_people ); -- 定義游標并輸入結(jié)果集

DECLARE cur_2 CURSOR FOR ( SELECT id_2,name_2 FROM t_people_2); --定義游標并輸入結(jié)果集

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 綁定控制變量到游標,游標循環(huán)結(jié)束自動轉(zhuǎn)true

OPEN cur_1; -- 打開游標

posLoop: LOOP -- 開始循環(huán)體,myLoop為自定義循環(huán)名,結(jié)束循環(huán)時用到

FETCH cur_1 into my_id, my_name; -- 將游標當前讀取行的數(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; -- 關閉游標

SET done = FALSE;  -- 因為當?shù)谝粋€游標遍歷完后其值被handler設置為TRUE了,如果不用set把它設置為 FALSE ,那么第二個游標就不會遍歷了。(最好是在每個打開游標的操作前都用該語句,以確保游標能真正遍歷)

OPEN cur_2; -- 打開游標

posLoop_2: LOOP -- 開始循環(huán)體,myLoop為自定義循環(huán)名,結(jié)束循環(huán)時用到

FETCH cur_2 into my_id, my_name; -- 將游標當前讀取行的數(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; -- 關閉游標

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

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

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

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

CALL 存儲過程名(@aaa);

SELECT @aaa;

4.刪除存儲過程

DROP PROCEDURE 存儲過程名;

5.注意事項

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

總結(jié)

以上是生活随笔為你收集整理的mysql中的逻辑类型如何定义_MYSQL存储过程即常用逻辑知识点总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。