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