mysql存储过程和事件详解数据库

1.会员表member和车辆表car,更新每个会员下面的车辆数量have_car字段。

DELIMITER $$ 
 
USE $$ 
 
DROP PROCEDURE IF EXISTS `sp_update_member_have_car`$$ 
 
CREATEPROCEDURE `sp_update_member_have_car`() 
BEGIN 
    DECLARE tmp INT DEFAULT 0;   
    DECLARE done INT DEFAULT -1;   
     
    /* 声明游标 */   
    DECLARE myCursor CURSOR FOR SELECT reg_no FROM member WHERE have_car IS NULL;   
       
    /* 当游标到达尾部时,mysql自动设置done=1 */      
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;   
       
    /* 打开游标 */   
    OPEN myCursor;   
       
    /* 循环开始 */   
    myLoop: LOOP   
        /* 移动游标并赋值 */   
        FETCH myCursor INTO tmp;   
        IF done = 1 THEN    
            LEAVE myLoop;   
        END IF;   
           /* do something */   
        UPDATE member SET have_car = (SELECT COUNT(*) FROM car WHERE mem_no= tmp ) WHERE reg_no = tmp;  
    /* 循环结束 */   
    END LOOP myLoop;   
       
    /* 关闭游标 */   
    CLOSE myCursor; 
    END$$ 
 
DELIMITER ;

建立执行计划,每天凌晨1点执行存储过程。

DELIMITER $$ 
 
ALTER EVENT `E_Update_HaveCar_Field_Event_1` ON SCHEDULE EVERY 1 DAY STARTS '2014-09-19 01:00:00' ON COMPLETION PRESERVE ENABLE DO BEGIN 
        CALL `sp_update_member_have_car`();   
    END$$ 
 
DELIMITER ;

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/4650.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论