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

MySQL存儲過程之循環(huán)遍歷查詢的結(jié)果集詳解

 更新時間:2025年06月12日 14:33:14   作者:xiaomu_a  
這篇文章主要介紹了MySQL存儲過程之循環(huán)遍歷查詢的結(jié)果集,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

前言

近來碰到這樣一個問題:在生產(chǎn)上導入的數(shù)據(jù)發(fā)現(xiàn)會員的相冊數(shù)量統(tǒng)計結(jié)果與相冊中實際的數(shù)量不一致的問題。

解決這個問題有兩種辦法:

  • 1:使用程序修正數(shù)量不一致的問題
  • 2:使用MySQL的存儲過程

若使用第一種辦法的話,需要重新發(fā)布版本,比較麻煩,再加上領(lǐng)導對發(fā)布版本有些抵觸,我覺得我們還是使用第二種方式比較快捷。

1. 表結(jié)構(gòu)

測試表結(jié)構(gòu)如下:

CREATE TABLE `member_album` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '數(shù)據(jù)ID',
  `member_id` int(11) DEFAULT NULL COMMENT '會員ID',
  `file_type` varchar(8) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件類型(image:照片;video:視頻)',
  `file_id` int(11) DEFAULT NULL COMMENT '文件ID',
  `file_path` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件地址(相對地址)',
  `create_date` datetime DEFAULT NULL COMMENT '創(chuàng)建時間',
  `del_flag` tinyint(1) DEFAULT '0' COMMENT '刪除標識(0:正常;1:已刪除)',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='會員相冊';
CREATE TABLE `member_album_count` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '數(shù)據(jù)ID',
  `member_id` int(11) DEFAULT NULL COMMENT '會員ID',
  `img_pass_count` int(11) DEFAULT '0' COMMENT '照片通過的數(shù)量',
  `img_verify_count` int(11) DEFAULT '0' COMMENT '照片審核中的數(shù)量',
  `img_fail_count` int(11) DEFAULT '0' COMMENT '照片未通過的數(shù)量',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='會員照片數(shù)量表';

測試表數(shù)據(jù)如下:

會員相冊表:

會員相冊數(shù)量表:

很明顯,會員相冊數(shù)量表中的數(shù)據(jù)是不對的,例如會員ID為10024的照片有3張,而在會員相冊數(shù)量表中顯示的是0張。

2. 存儲過程

-- 建立存儲過程之前需要判斷該存儲過程是否存在,若存在則刪除
DROP PROCEDURE IF EXISTS update_album_count;
-- 創(chuàng)建存儲過程,update_album_count為存儲過程名
CREATE PROCEDURE update_album_count()
-- 標識存儲過程開始
BEGIN
	-- 定義變量
	DECLARE s int DEFAULT 0;
	DECLARE memberId int;
	DECLARE count int;
	-- 定義游標,并將sql結(jié)果集賦值到游標中,report為游標名
	DECLARE report CURSOR FOR SELECT member_id, COUNT(member_id)
							  FROM member_album 
							  GROUP BY member_id
							  HAVING COUNT(member_id) > 0
							  ORDER BY member_id ASC;
	-- 聲明當游標遍歷完后將標志變量置為某個值
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET s = 1;
	-- 打開游標
	OPEN report;
	-- 將游標中的值賦值給變量,注意:變量名不要與sql返回的列名相同,變量順序要和sql結(jié)果列的順序一致
	FETCH report INTO memberId, count;
	-- 當s不等于1時,也就是未遍歷完時,會一直循環(huán)
	WHILE s <> 1 DO
	-- 執(zhí)行業(yè)務(wù)邏輯
	UPDATE member_album_count t SET t.img_pass_count = count WHERE t.member_id = memberId;
	-- 當s等于1時代表遍歷已完成,退出循環(huán)
	FETCH report INTO memberId, count;
	END WHILE;
	-- 關(guān)閉游標
	CLOSE report;
-- 標識存儲過程結(jié)束
END;

執(zhí)行存儲過程:

CALL update_album_count();

此時再來看會員相冊數(shù)量表數(shù)據(jù):

已經(jīng)正常了?。?!

3. 關(guān)于存儲過程的SQL補充

-- 顯示存儲過程的狀態(tài)
show procedure status;
-- 查詢指定數(shù)據(jù)庫的存儲過程名稱
select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE'

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL地理空間數(shù)據(jù)完整使用實戰(zhàn)指南

    MySQL地理空間數(shù)據(jù)完整使用實戰(zhàn)指南

    地理空間數(shù)據(jù)主要用于存儲地理位置信息,如點、線、面等幾何對象,廣泛應(yīng)用于地圖服務(wù)、位置服務(wù)、物流追蹤等領(lǐng)域,本文介紹MySQL地理空間數(shù)據(jù)完整使用指南,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • MySQL數(shù)據(jù)過濾與計算字段實戰(zhàn)指南

    MySQL數(shù)據(jù)過濾與計算字段實戰(zhàn)指南

    本文介紹了MySQL數(shù)據(jù)過濾與計算字段的實戰(zhàn)技術(shù),包括多條件組合、通配符過濾、正則表達式搜索和計算字段的使用,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • Mysql中的排序規(guī)則utf8_unicode_ci、utf8_general_ci的區(qū)別總結(jié)

    Mysql中的排序規(guī)則utf8_unicode_ci、utf8_general_ci的區(qū)別總結(jié)

    Mysql中utf8_general_ci與utf8_unicode_ci有什么區(qū)別呢?在編程語言中,通常用unicode對中文字符做處理,防止出現(xiàn)亂碼,那么在MySQL里,為什么大家都使用utf8_general_ci而不是utf8_unicode_ci呢?
    2014-04-04
  • MySql索引使用策略分析

    MySql索引使用策略分析

    這篇文章主要介紹了MySql索引使用策略分析,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2020-11-11
  • Centos7.3下mysql5.7安裝配置教程

    Centos7.3下mysql5.7安裝配置教程

    這篇文章主要為大家詳細介紹了Centos7.3下mysql5.7安裝配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • MySQL聯(lián)合查詢詳細示例代碼

    MySQL聯(lián)合查詢詳細示例代碼

    MySQL聯(lián)合查詢是數(shù)據(jù)庫操作中十分重要的技能之一,它允許用戶從多個表中提取并組合數(shù)據(jù),下面這篇文章主要介紹了MySQL聯(lián)合查詢的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-10-10
  • 對MySQL子查詢的簡單改寫優(yōu)化

    對MySQL子查詢的簡單改寫優(yōu)化

    這篇文章主要介紹了對MySQL子查詢的簡單改寫優(yōu)化,文中的小修改主要將子查詢改為關(guān)聯(lián)從而降低查詢時關(guān)聯(lián)的次數(shù),需要的朋友可以參考下
    2015-05-05
  • mysql中的general_log(查詢?nèi)罩?開啟和關(guān)閉

    mysql中的general_log(查詢?nèi)罩?開啟和關(guān)閉

    這篇文章主要介紹了mysql中的general_log(查詢?nèi)罩?開啟和關(guān)閉問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Centos7使用yum安裝MySQL及實現(xiàn)遠程連接的方法

    Centos7使用yum安裝MySQL及實現(xiàn)遠程連接的方法

    因為MySQL被Oracle收購,目前推薦使用mariadb數(shù)據(jù)庫。下面通過本文給大家分享Centos7使用yum安裝MySQL及實現(xiàn)遠程連接的方法,感興趣的朋友一起看看吧
    2017-07-07
  • mysql如何查看當前連接數(shù)

    mysql如何查看當前連接數(shù)

    這篇文章主要介紹了mysql如何查看當前連接數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03

最新評論

江山市| 河南省| 卫辉市| 闽侯县| 桂林市| 开阳县| 奉节县| 资中县| 会东县| 堆龙德庆县| 秭归县| 深泽县| 秦安县| 南江县| 上思县| 德化县| 大同县| 布尔津县| 石台县| 巴林右旗| 汝南县| 古蔺县| 南平市| 论坛| 疏勒县| 元朗区| 通江县| 霸州市| 咸阳市| 镇康县| 安福县| 油尖旺区| 德保县| 水富县| 奉贤区| 隆昌县| 朔州市| 上蔡县| 岱山县| 青铜峡市| 仁寿县|