更新查询以每月重置表字段

时间:2015-04-30 06:48:59

标签: mysql

我有一个名为service_tracker的表。该表包含6个字段,但与我的问题最相关的是cycle_startlast_used。目前,我可以确定service的以下内容:usage_count在1个月内user使用last_used的时间cycle_startusage_count })。只要不早于1个月,第一个查询就会向usage_count = 1添加1。如果超过1个月,则第二个查询会清除并设置usage_count。查询工作很好,但是,是否可以在一年的十二个月的基础上执行此操作?清除并设置为UPDATE service_tracker SET usage_count = usage_count + 1, last_used = CURDATE() WHERE service_tracker = 'cloudstorage' AND `user` = 'test2' AND last_used >= date_sub(CURDATE(), INTERVAL 1 month); UPDATE service_tracker SET usage_count = 1, last_used = '0000-00-00', cycle_start = CURDATE() WHERE service_tracker = 'cloudstorage' AND `user` = 'test2' AND cycle_start < date_sub(CURDATE(), interval 1 month); 一旦四月,五月,六月等结束?

查询:

CREATE TABLE IF NOT EXISTS `service_tracker` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `service` varchar(50) NOT NULL,
  `cycle_start` date NOT NULL,
  `user` varchar(200) NOT NULL,
  `usage_count` int(6) NOT NULL,
  `last_used` date NOT NULL,
  PRIMARY KEY (`id`)
);

INSERT INTO `service_tracker` (`id`, `service`, `cycle_start`, `user`, `usage_count`, `last_used`) VALUES
    (1, 'webserver', '2015-04-24', 'test1', 13, '2015-04-24'),
    (2, 'cloudstorage', '2015-04-16', 'test2', 390, '2015-04-30'),
    (3, 'web-traffic-tracker', '2015-04-16', 'test3', 1916, '2015-04-30'),
    (4, 'remote-it-help', '2015-04-16', 'test4', 91, '2015-04-16');

表架构

ALTER

1 个答案:

答案 0 :(得分:4)

您可以使用mysql调度程序在特定(和重复)时间运行查询。

DELIMITER $$
CREATE EVENT reset_usage_count
ON SCHEDULE EVERY '1' MONTH
STARTS '2015-05-01 00:00:00'
DO 
BEGIN
 -- your query to reset the usage_count
END$$    
DELIMITER ;

这个会在每个月的第一天午夜开始查询。您需要确保全局变量event_scheduler设置为on。您可以通过执行show proceslist并查找User: event_scheduler

来检查它是否正在运行