有没有办法自动更新Mysql DB中一个具有预定义值的表中列的值,并且每个月都应该进行更新。
情况是,我希望更新表员工中每月为每位员工添加2.5天的列余额,并且每个员工每两年应重置总天数。
答案 0 :(得分:3)
数据库并没有真正起作用。它们用于存储信息。您可以编写触发器,因此如果您更新行或插入,则会发生事件,但除此之外数据不会更改
应该在应用程序逻辑中处理这样的事情。创建一个cron或其他定期作业,它将获取在X日期创建的行并更新它们
答案 1 :(得分:2)
考虑使用mysql的创建事件策略,这可能会导致无需执行cron作业。
Process finished with exit code 255
DELIMITER $$
CREATE EVENT monthlyAddFlexDaysEvent
ON SCHEDULE EVERY '1' MONTH
STARTS '2015-09-01 00:00:00'
DO
BEGIN
update empAccrued set daysAccrued=daysAccrued+2.5;
END$$
DELIMITER ;
在几乎任何事件中你都可以做一些不会在今年的第一天发生的事情。例如,根据员工周年日期处理更新的每周活动。
在CREATE EVENT上的手册页,
DELIMITER $$ CREATE EVENT annualThingEvent ON SCHEDULE EVERY '1' YEAR STARTS '2016-01-01 00:00:00' DO BEGIN -- perform some annual thing END$$ DELIMITER ;
正确设置事件甚至发生并监控它们非常重要。
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND
ooops,事件调度程序未打开。
我可以整天等待,事件甚至没有打开
show variables where variable_name='event_scheduler';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| event_scheduler | OFF |
+-----------------+-------+
按架构名称列出所有事件:
SET GLOBAL event_scheduler = ON; -- turn her on
show variables where variable_name='event_scheduler';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| event_scheduler | ON |
+-----------------+-------+
或
show events from so_gibberish;