亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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 ORDER BY 的實現(xiàn)分析

    MySQL ORDER BY 的實現(xiàn)分析

    總的來說,在 MySQL 中的ORDER BY有兩種排序?qū)崿F(xiàn)方式,一種是利用有序索引獲取有序數(shù)據(jù),另一種則是通過相應(yīng)的排序算法,將取得的數(shù)據(jù)在內(nèi)存中進行排序
    2012-07-07
  • MySQL導致索引失效的原因及分析

    MySQL導致索引失效的原因及分析

    索引失效的原因主要包括違反最左前綴法則、范圍查詢、索引列上進行運算操作、字符串不加單引號以及以%開頭的like模糊查詢,了解這些原因有助于我們更好地使用索引,提高查詢效率
    2024-12-12
  • 淺析MySQL并行復(fù)制

    淺析MySQL并行復(fù)制

    這篇文章主要介紹了MySQL并行復(fù)制的相關(guān)資料,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-11-11
  • mysql 8.0.19 win10快速安裝教程

    mysql 8.0.19 win10快速安裝教程

    這篇文章主要為大家詳細介紹了mysql 8.0.19 win10快速安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • mysql explain的用法(使用explain優(yōu)化查詢語句)

    mysql explain的用法(使用explain優(yōu)化查詢語句)

    mysql explain可以幫助你檢查索引和更好的優(yōu)化查詢語句,今天特地學習了下mysql explain的用法,需要的朋友可以參考下
    2017-01-01
  • Mysql Update批量更新的幾種方式

    Mysql Update批量更新的幾種方式

    今天小編就為大家分享一篇關(guān)于Mysql Update批量更新的幾種方式,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • mysql 無法聯(lián)接常見故障及原因分析

    mysql 無法聯(lián)接常見故障及原因分析

    這篇文章主要介紹了mysql 無法聯(lián)接常見故障及原因分析,本文是小編日常收集整理的,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-11-11
  • MySQL如何用GROUP BY分組取字段最大值或最新一條

    MySQL如何用GROUP BY分組取字段最大值或最新一條

    這篇文章主要介紹了MySQL如何用GROUP BY分組取字段最大值或最新一條問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 基于python的mysql復(fù)制工具詳解

    基于python的mysql復(fù)制工具詳解

    python-mysql-replication 是基于python實現(xiàn)的 MySQL復(fù)制協(xié)議工具,我們可以用它來解析binlog 獲取日志的insert,update,delete等事件 ,并基于此做其他業(yè)務(wù)需求。這篇文章主要介紹了基于python的mysql復(fù)制工具,需要的朋友可以參考下
    2019-06-06
  • 登錄mysql時出現(xiàn)的閃退問題解決

    登錄mysql時出現(xiàn)的閃退問題解決

    大家在打開MySQL時,可能會遇到在登陸界面輸入密碼之后就閃退的這個問題,下面這篇文章主要給大家介紹了關(guān)于如何解決登錄mysql時出現(xiàn)的閃退問題的相關(guān)資料,需要的朋友可以參考下
    2023-05-05

最新評論