MySQL的事件就像Linux系统上的定时任务,按照设置的时间或者间隔时间执行设置好的任务。
如果用SQLyog一类的写存储过程、触发器或者事件会省事一些,例如SQLyog就会生成一个大致的模板:
1 DELIMITER $$ 2 CREATE EVENT `report`.`monitor_user4cx` ON SCHEDULE EVERY 15 MINUTE DO 3 BEGIN 4 DECLARE cx_id INT(10); 5 DECLARE t_query VARCHAR(500); 6 DECLARE done INT DEFAULT FALSE; 7 DECLARE cur CURSOR FOR SELECT id FROM information_schema.PROCESSLIST WHERE `USER`='cx' AND `TIME` > 600 AND `Command`='Query'; 8 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 9 OPEN cur; 10 read_loop:LOOP 11 FETCH cur INTO cx_id; 12 IF done THEN 13 LEAVE read_loop; 14 END IF; 15 SELECT t.trx_query,t.trx_started,p.`USER` FROM information_schema.PROCESSLIST p INNER JOIN information_schema.innodb_trx t ON p.id=t.trx_mysql_thread_id WHERE p.id=cx_id INTO @t_query,@t_time,@p_user; 16 INSERT INTO test.monitor_user4cx(`p_id`,`start_time`,`user`,`time`,`query`) VALUES (cx_id,@t_time,@p_user,NOW(),@t_query); 17 KILL cx_id; 18 END LOOP; 19 CLOSE cur; 20 END$$ 21 DELIMITER ;