mysql存储过程样例

样例一:老表有三百万数据,需要将老表加上一个字段,但是因为,数据太大,新加字段失败,退而求其次,先建一个新表,使用select insert 导数据:

delimiter $$
drop procedure if exists wk;
create procedure wk()
begin
declare i int;
set i = 1;
while i < 11650 do
insert ignore into site_result_new (auto_id,site_id,redirct_url,host,title,keywords,description,site_type_l1,site_type_l2,site_type,update_time,crawler_flag,short_link,middle_link,long_link,pic_link_num,main_text,main_text_length,protpcol,crawler_status,other_site_link_num,crawler_exception,iframe_url,img_link,ip,ip_country,ip_province,shot_name,mark_add,mark_minus,mark_user) select auto_id,site_id,redirct_url,host,title,keywords,description,site_type_l1,site_type_l2,site_type,update_time,crawler_flag,short_link,middle_link,long_link,pic_link_num,main_text, main_text_length,protpcol,crawler_status,other_site_link_num,crawler_exception,iframe_url,img_link,ip,ip_country,ip_province,shot_name,mark_add,mark_minus,mark_user from site_result where auto_id between (i-1)*1000 and i*1000;
set i = i +1;
end while;
end $$

delimiter;
call wk();

某段数据导出

先查询出起止位置,min_id和max_id

循环次数=(max_id-min_id)/size

存储过程

begin
declare i int;
set i = 1;
while i < 1465 do
insert IGNORE into test.info_data_test  SELECT * from info_data where id between  257962863+(i-1)*5000 and 257962863+i*5000 and site_group=119;
set i = i +1;
end while;
end $$
 
delimiter;
call wk();

按照时间滚动存储

DELETE from test.data_sum ;
DELIMITER //
DROP PROCEDURE IF EXISTS daily_data_summary;
CREATE PROCEDURE daily_data_summary()
BEGIN
    DECLARE cur_date DATE;
    SET cur_date = '2023-11-19';

    WHILE cur_date < '2023-11-22' DO
        INSERT INTO test.data_sum (num, daytime)
        SELECT COUNT(1) AS num, IFNULL(DATE(pubtime), cur_date) AS daytime
        FROM news
        WHERE pubtime >= cur_date AND pubtime < DATE_ADD(cur_date, INTERVAL 1 DAY);

        SET cur_date = DATE_ADD(cur_date, INTERVAL 1 DAY);
    END WHILE;
END //

DELIMITER ;

CALL daily_data_summary();
select * from test.data_sum ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值