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

MySQL雙層游標(biāo)嵌套循環(huán)實現(xiàn)方法

 更新時間:2024年05月05日 11:06:50   作者:bacawa  
要實現(xiàn)逐行獲取數(shù)據(jù),需要用到MySQL中的游標(biāo),一個游標(biāo)相當(dāng)于一個for循環(huán),這里需要用到2個游標(biāo),如何在MySQL中實現(xiàn)游標(biāo)雙層循環(huán)呢,下面小編給大家分享MySQL雙層游標(biāo)嵌套循環(huán)方法,感興趣的朋友跟隨小編一起看看吧

1、需求描述

1、在項目中,需要將A表中主鍵id,逐個取出,作為條件,在B表中去逐一查詢,將B表查詢到的結(jié)果集(A表B表關(guān)系:一對多),逐一遍歷,連同A表的id拼接運(yùn)算,逐個插入到C表中。

2、 在Java中很容易實現(xiàn),A表獲取到的結(jié)果集,循環(huán)遍歷取出id,去B表查詢;遍歷B表結(jié)果集,插入到C表中。 相當(dāng)于2個循環(huán),即可實現(xiàn)需求。 這樣會有一個問題,頻繁連接數(shù)據(jù)庫,造成大量資源開銷。 那么在存儲過程中,該怎么實現(xiàn)呢?

2、思路

  要實現(xiàn)逐行獲取數(shù)據(jù),需要用到MySQL中的游標(biāo),一個游標(biāo)相當(dāng)于一個for循環(huán),這里需要用到2個游標(biāo)。如何在MySQL中實現(xiàn)游標(biāo)雙層循環(huán)呢?

3、創(chuàng)建存儲過程

CREATE DEFINER=`root`@`%` PROCEDURE `student`()
BEGIN
	-- 定義變量
		-- 假設(shè)有一張學(xué)生表,有id,student_name字段
		DECLARE outer_done INT DEFAULT FALSE; -- 外層游標(biāo)控制變量
		DECLARE studentTableId int;    -- 學(xué)生表ID
		declare studentTableName VARCHAR(100);   -- 學(xué)生姓名
		declare outer_cursor cursor for select id,student_name from student_table  where `disable` = '0'; 
		DECLARE CONTINUE HANDLER FOR NOT FOUND SET outer_done = TRUE;
		open outer_cursor;     
			while not outer_done do
					fetch outer_cursor into studentTableId,studentTableName;  -- 這里循環(huán)取值,賦值到上面定義的變量中
						-- 開始定義內(nèi)層游標(biāo)
						BEGIN -- inner BEGIN
								-- 假設(shè)有一張成績表,包含字段id,student_name,score字段
								DECLARE scoreTableId int;    -- 成績Id
								declare scoreTableName VARCHAR(100);    -- 學(xué)生名字
								declare scoreTableScore float;   -- 學(xué)生分?jǐn)?shù)
								DECLARE inner_done int DEFAULT FALSE ;
								DECLARE my_value VARCHAR(255);
								declare inner_cursor cursor for select id,student_name,score from score_table where `disable` = '0'; 
								DECLARE CONTINUE HANDLER FOR NOT FOUND SET inner_done  = TRUE ;
								OPEN inner_cursor; -- 打開內(nèi)層游標(biāo)
								WHILE not inner_done DO -- inner WHILE
									FETCH inner_cursor INTO scoreTableId,scoreTableName,scoreTableScore ; -- 從【內(nèi)層游標(biāo)】中獲取數(shù)據(jù),賦值到定義變量中
									 IF studentTableName = scoreTableName THEN    -- 判斷名字一樣(測試,生產(chǎn)不要用名稱進(jìn)行判斷)
										set my_value = CONCAT_WS('-',studentTableName,scoreTableScore);    -- 給變量賦值 CONCAT_WS函數(shù)可以按照固定的連接符,將數(shù)據(jù)進(jìn)行連接,例如 張三-95
										select my_value;     -- 打印變量值
									 END IF;
									 -- 假設(shè)有一張匯總表(summary_table),將處理的數(shù)據(jù)進(jìn)行更新
									 update summary_table set summary_column=my_value where summary_table_student_id=studentTableId;
								END WHILE ; -- END inner WHILE
								CLOSE inner_cursor; -- 循環(huán)結(jié)束后,關(guān)閉內(nèi)層游標(biāo)
						END; -- END inner BEGIN
			end while;        
		close outer_cursor;  
END

看圖清晰一點(diǎn)。

到這里就完成了,存儲過程里面的注釋很詳細(xì),就不多贅述了,我在寫存儲過程中也是踩了不少坑,記錄下來,希望能幫到各位coder。

到此這篇關(guān)于MySQL雙層游標(biāo)嵌套循環(huán)方法的文章就介紹到這了,更多相關(guān)mysql游標(biāo)嵌套循環(huán)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySql中怎樣查詢表是否被鎖

    MySql中怎樣查詢表是否被鎖

    這篇文章主要介紹了MySql中怎樣查詢表是否被鎖問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 使用pt-kill根據(jù)一定的規(guī)則來kill連接的方法

    使用pt-kill根據(jù)一定的規(guī)則來kill連接的方法

    pt-kill 是一個優(yōu)秀的kill MySQL連接的一個工具,是percona toolkit的一部分,在因為空閑連接較多導(dǎo)致超過最大連接數(shù)、某個有問題的sql導(dǎo)致mysql負(fù)載很高時,都需要將一些連接kill掉,這個工具主要就是這個用途
    2016-04-04
  • 使用MySQL子查詢和CASE語句判斷關(guān)聯(lián)狀態(tài)

    使用MySQL子查詢和CASE語句判斷關(guān)聯(lián)狀態(tài)

    在這篇文章中,我們將詳細(xì)講解如何使用 MySQL 的子查詢和 CASE 語句來實現(xiàn)復(fù)雜的邏輯判斷,具體案例是我們有兩個表 card_management 和 card_auth_register,通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • MySQL的索引失效的原因?qū)嵗敖鉀Q方案

    MySQL的索引失效的原因?qū)嵗敖鉀Q方案

    這篇文章主要討論了MySQL索引失效的常見原因及其解決方案,它涵蓋了數(shù)據(jù)類型不匹配、隱式轉(zhuǎn)換、函數(shù)或表達(dá)式、范圍查詢、LIKE查詢、OR條件、全表掃描、索引選擇性低、覆蓋索引不足和統(tǒng)計信息不準(zhǔn)確等問題,感興趣的朋友一起看看吧
    2024-12-12
  • 詳解mysql 組合查詢

    詳解mysql 組合查詢

    這篇文章主要介紹了詳解mysql 組合查詢的的相關(guān)資料,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-12-12
  • Mysql關(guān)聯(lián)查詢的幾種實現(xiàn)方式

    Mysql關(guān)聯(lián)查詢的幾種實現(xiàn)方式

    這篇文章主要介紹了Mysql關(guān)聯(lián)查詢的幾種實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Advanced Pagination for MySQL(mysql高級分頁)

    Advanced Pagination for MySQL(mysql高級分頁)

    看到葉金榮的一篇關(guān)于mysql分頁的文章,結(jié)合雅虎之前發(fā)的一篇PDF 談?wù)勛约旱目捶?/div> 2016-08-08
  • MySQL數(shù)據(jù)查看SELECT條件大于?小于(小白入門篇)

    MySQL數(shù)據(jù)查看SELECT條件大于?小于(小白入門篇)

    這篇文章主要為大家介紹了MySQL數(shù)據(jù)查看SELECT條件大于和小于的語句學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 使用MySQL如何實現(xiàn)分頁查詢

    使用MySQL如何實現(xiàn)分頁查詢

    這篇文章主要介紹了使用MySQL如何實現(xiàn)分頁查詢,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • mysql缺少my.ini文件的最佳解決方法

    mysql缺少my.ini文件的最佳解決方法

    my.ini是MySQL數(shù)據(jù)庫中使用的配置文件,修改這個文件可以達(dá)到更新配置的目的,下面這篇文章主要給大家介紹了關(guān)于mysql缺少my.ini文件的最佳解決方法,需要的朋友可以參考下
    2024-01-01

最新評論

蒙山县| 青河县| 长海县| 河曲县| 论坛| 普格县| 石景山区| 清丰县| 蒲江县| 弥勒县| 合川市| 彰化县| 白银市| 英吉沙县| 海原县| 横山县| 武山县| 博罗县| 六盘水市| 定安县| 长沙市| 三明市| 饶河县| 三江| 汉源县| 崇仁县| 苏尼特左旗| 比如县| 平阴县| 平湖市| 保亭| 德兴市| 临沧市| 遂川县| 抚宁县| 剑阁县| 宣武区| 云南省| 精河县| 阿克陶县| 宁城县|