最近需要用MySQL写一个定时任务,就简单写了一个存储过程的模板,并添加了事务。
一个简单的模板,以后可以把想要的操作扔进去, 放在定时里执行就OK了!
DROP PROCEDURE IF EXISTS p1;
CREATE PROCEDURE p1()
BEGIN
DECLARE tmp_id,tmp_user_id VARCHAR(50);
DECLARE delay_time INT DEFAULT 5*60;
DECLARE _done INT DEFAULT 0;
DECLARE _error INT DEFAULT 0;
DECLARE _Cur CURSOR FOR SELECT id,user_id from t_tmp where NOW()-got_date > delay_time;
/*定义光标终止标记*/
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET _done = 1;
/*定义事务异常标记*/
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET _error= 1;
OPEN _Cur;
REPEAT
FETCH _Cur into tmp_id,tmp_user_id;
IF NOT _done THEN
IF tmp_id IS NOT NULL THEN
START TRANSACTION;/*开启事务*/
/*执行语句*/
IF _error = 1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END IF;
END IF;
SELECT _error;
UNTIL _done END REPEAT;
CLOSE _Cur;
END;
CALL p1;