在进行一些少量的数据开发的过程中,不想总是依赖外部的自定义系统来实现数据的自动生成,校验。
可以尝试使用存储过程来实现一些需求。
存储过程来实现数据的检查和数据的自动生产,可以不用客户端就能进行大范围的逻辑书写了。
我把我写过的存储的过程用到的一些方法分享在这,希望能帮助到需要的小伙伴。
数据库: MySQL
版本: 8.0
定义变量Demo
DECLARE s int DEFAULT 0;
DECLARE fans_num int DEFAULT 0;
DECLARE fans_num_count int DEFAULT 0;
DECLARE end_flag int DEFAULT 0;
DECLARE has_table int DEFAULT 0;
DECLARE V_P_SQL varchar(255);
DECLARE fans_table varchar(255);
DECLARE workerId varchar(255);
DECLARE fansId int;
循环表数据Demo:
-- 定义一个循环 查询遍历user_crawl_task的所有数据
DECLARE worker_cursor CURSOR FOR SELECT id, worker_id FROM user_crawl_task where LENGTH(worker_id) > 5;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET s = 1;
OPEN worker_cursor;
-- 获取遍历的值
FETCH worker_cursor INTO fansId, workerId;
WHILE s <> 1 DO
-- 中间部分定义逻辑 具体的操作逻辑
-- 遍历值循环获取
FETCH worker_cursor INTO fansId, workerId;
END WHILE;
CLOSE worker_cursor;
IF判断Demo:
if has_table <> 0 then
-- 具体的逻辑1
else
-- 具体的逻辑1
end if;
拼接字符串Demo:
set fans_table = CONCAT('anchor_studio_fans_', workerId);
拼接SQL并执行Demo,划重点,这个地方是比较难的。
而且不同版本的实现在变更。
-- 创建查询指定表的数据条数 拼接SQL
SET @V_P_SQL = CONCAT('select count(1) into @recordcount from ',fans_table,';');
PREPARE stmt FROM @V_P_SQL;
EXECUTE stmt;
-- 提取查询的结果
set fans_num = @recordcount;
-- 具体的逻辑
DEALLOCATE PREPARE stmt;
MySQL创建定时任务计划:
CREATE EVENT IF NOT EXISTS update_status
ON SCHEDULE EVERY 30 SECOND
ON COMPLETION PRESERVE
DO CALL MINUTE_SCHEDURE();