IT虾米网

mysql存储过程和事件详解

leader 2018年10月17日 数据库 121 0

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 ;

 



发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

阿里云图片压缩上传代码详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。