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