MySQL雙層游標嵌套循環(huán)實現方法
1、需求描述
1、在項目中,需要將A表中主鍵id,逐個取出,作為條件,在B表中去逐一查詢,將B表查詢到的結果集(A表B表關系:一對多),逐一遍歷,連同A表的id拼接運算,逐個插入到C表中。
2、 在Java中很容易實現,A表獲取到的結果集,循環(huán)遍歷取出id,去B表查詢;遍歷B表結果集,插入到C表中。 相當于2個循環(huán),即可實現需求。 這樣會有一個問題,頻繁連接數據庫,造成大量資源開銷。 那么在存儲過程中,該怎么實現呢?
2、思路
要實現逐行獲取數據,需要用到MySQL中的游標,一個游標相當于一個for循環(huán),這里需要用到2個游標。如何在MySQL中實現游標雙層循環(huán)呢?
3、創(chuàng)建存儲過程
CREATE DEFINER=`root`@`%` PROCEDURE `student`() BEGIN -- 定義變量 -- 假設有一張學生表,有id,student_name字段 DECLARE outer_done INT DEFAULT FALSE; -- 外層游標控制變量 DECLARE studentTableId int; -- 學生表ID declare studentTableName VARCHAR(100); -- 學生姓名 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)取值,賦值到上面定義的變量中 -- 開始定義內層游標 BEGIN -- inner BEGIN -- 假設有一張成績表,包含字段id,student_name,score字段 DECLARE scoreTableId int; -- 成績Id declare scoreTableName VARCHAR(100); -- 學生名字 declare scoreTableScore float; -- 學生分數 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; -- 打開內層游標 WHILE not inner_done DO -- inner WHILE FETCH inner_cursor INTO scoreTableId,scoreTableName,scoreTableScore ; -- 從【內層游標】中獲取數據,賦值到定義變量中 IF studentTableName = scoreTableName THEN -- 判斷名字一樣(測試,生產不要用名稱進行判斷) set my_value = CONCAT_WS('-',studentTableName,scoreTableScore); -- 給變量賦值 CONCAT_WS函數可以按照固定的連接符,將數據進行連接,例如 張三-95 select my_value; -- 打印變量值 END IF; -- 假設有一張匯總表(summary_table),將處理的數據進行更新 update summary_table set summary_column=my_value where summary_table_student_id=studentTableId; END WHILE ; -- END inner WHILE CLOSE inner_cursor; -- 循環(huán)結束后,關閉內層游標 END; -- END inner BEGIN end while; close outer_cursor; END
看圖清晰一點。
到這里就完成了,存儲過程里面的注釋很詳細,就不多贅述了,我在寫存儲過程中也是踩了不少坑,記錄下來,希望能幫到各位coder。
到此這篇關于MySQL雙層游標嵌套循環(huán)方法的文章就介紹到這了,更多相關mysql游標嵌套循環(huán)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Linux下將數據庫從MySQL遷移到MariaDB的基礎操作教程
這篇文章主要介紹了將數據庫從MySQL遷移到MariaDB的基礎操作教程,當然遷移之前不要忘記數據庫的備份!需要的朋友可以參考下2015-11-11mysql 8.0.15 安裝配置方法圖文教程(Windows10 X64)
這篇文章主要為大家詳細介紹了Windows10 X64 mysql 8.0.15 安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-03-03