在Mysql Data Base中每月为列添加值

时间:2015-08-29 23:46:18

标签: mysql sql

有没有办法自动更新Mysql DB中一个具有预定义值的表中列的值,并且每个月都应该进行更新。

情况是,我希望更新表员工中每月为每位员工添加2.5天的列余额,并且每个员工每两年应重置总天数。

2 个答案:

答案 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;