1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > MySQL - 创建存储过程Procedure Do While实现循环

MySQL - 创建存储过程Procedure Do While实现循环

时间:2019-04-20 19:29:15

相关推荐

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 '-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('-12-20'), INTERVAL - i DAY); -- 从'-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

这个报错和循环过程没有关系,这个窗口失效了,重新打开一个窗口再查询就正常了

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。