MySQL - 创建存储过程Procedure,Do While实现循环
生活随笔
收集整理的這篇文章主要介紹了
MySQL - 创建存储过程Procedure,Do While实现循环
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
處理數(shù)據(jù)的時候,往往需要回溯歷史,比如給用戶分群后計算每個群體的用戶數(shù)趨勢,那么就需要計算截止到每一天的各個群體的用戶數(shù)量,這個時候我們就需要創(chuàng)建存儲過程,并且在存儲過程中增加循環(huán)的功能,以此來實現(xiàn)上述回溯的需求。
第一步:先創(chuàng)建一個初始表,用于循環(huán)過程中插入數(shù)據(jù)
-- 創(chuàng)建表之前先判斷有沒有這個表存在,有的話就刪掉 DROP TABLE IF EXISTS test_table;-- 創(chuàng)建表 CREATE TABLE `test_table` (`id` INT (11) NOT NULL AUTO_INCREMENT,`time` VARCHAR (255) DEFAULT '2021-12-22 11:22:32',PRIMARY KEY (`id`),UNIQUE KEY `time` (`time`) ) ENGINE = INNODB AUTO_INCREMENT = 11 DEFAULT CHARSET = utf8;-- 創(chuàng)建完先看一眼這個表 desc test_table;第二步:創(chuàng)建存儲過程
-- 定義結(jié)束符為 $$ delimiter $$-- 創(chuàng)建存儲過程之前先判斷有沒有這個存儲過程存在,有的話就刪掉,防止報錯 drop procedure if exists insertdata; create procedure insertdata( a INT) -- 創(chuàng)建新的存儲過程,a是參數(shù),整數(shù)begindeclare i int default 0; -- 變量聲明i while i < a do -- 判斷條件,滿足條件則執(zhí)行下面的循環(huán),不滿足條件則跳過,結(jié)束循環(huán)-- 插入數(shù)據(jù)set @t = DATE_ADD(DATE('2021-12-20'), INTERVAL - i DAY); -- 從'2021-12-20'往前回溯a天INSERT INTO test_table (`id`,`time`) VALUE (i , @t) ; set i = i + 1; -- 每執(zhí)行一次循環(huán)之后 i +1 end while; -- 結(jié)束循環(huán)end $$ -- 結(jié)束存儲過程第三步:調(diào)用循環(huán)過程
-- 調(diào)用存儲過程 call insertdata(10); -- 設(shè)置a為10,也就是從固定日期往前回溯10天的數(shù)據(jù)-- 查看存儲過程執(zhí)行之后的數(shù)據(jù) select * from test_table;番外:有時候會出現(xiàn)報錯Commands out of sync; you can't run this command now
這個報錯和循環(huán)過程沒有關(guān)系,這個窗口失效了,重新打開一個窗口再查詢就正常了
總結(jié)
以上是生活随笔為你收集整理的MySQL - 创建存储过程Procedure,Do While实现循环的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计精美Power Bi报告的诀窍以及让
- 下一篇: SQL基础知识:DDL、DML、DQL