MySQL巧用存储过程

在进行一些少量的数据开发的过程中,不想总是依赖外部的自定义系统来实现数据的自动生成,校验。

可以尝试使用存储过程来实现一些需求。

存储过程来实现数据的检查和数据的自动生产,可以不用客户端就能进行大范围的逻辑书写了。

我把我写过的存储的过程用到的一些方法分享在这,希望能帮助到需要的小伙伴。

数据库: 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();
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值