Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Mysql数据库中每月向列添加值_Mysql_Sql - Fatal编程技术网

在Mysql数据库中每月向列添加值

在Mysql数据库中每月向列添加值,mysql,sql,Mysql,Sql,是否有一种方法可以使用预先定义的值自动更新Mysql DB表中某列的值,并且更新应该每月进行一次 情况是,我想更新表employees中的列balance,每个员工每月增加2.5天,每个员工的总天数应每两年重置一次。数据库实际上不是这样工作的。它们是用来存储信息的。您可以编写触发器,以便在更新行或插入时发生事件,但数据不会更改 类似的事情应该在应用程序逻辑中处理。创建一个cron或其他定期作业,该作业将捕获X date上创建的行并更新它们考虑使用mysql的创建事件策略,这样就不需要执行cron

是否有一种方法可以使用预先定义的值自动更新Mysql DB表中某列的值,并且更新应该每月进行一次


情况是,我想更新表employees中的列balance,每个员工每月增加2.5天,每个员工的总天数应每两年重置一次。

数据库实际上不是这样工作的。它们是用来存储信息的。您可以编写触发器,以便在更新行或插入时发生事件,但数据不会更改


类似的事情应该在应用程序逻辑中处理。创建一个cron或其他定期作业,该作业将捕获X date上创建的行并更新它们

考虑使用mysql的创建事件策略,这样就不需要执行cron作业

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 ;


在任何情况下,你都可以做一些不属于你的事情,比如说今年的第一天。例如,根据员工周年纪念日处理更新的每周事件

从上的手册页

正确设置事件以使其均匀发生,并对其进行监控非常重要

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;

显示事件\G;——促使

显示事件;——是否可以使用Create Event语句?我将对此进行研究,我认为它可以解决问题@Drew感谢您的解释,我想知道更好的方法是创建cron作业还是使用Create Event,如果我关闭应用程序并在两个月后启动,cron会用两个月的值更新吗?我真的很困惑如果你关掉什么?mysql数据库确实是个问题。mysql是否正在运行,人们是否可以连接(包括cron),事件是否如我的回答中所示打开或关闭。当你说app时,它是什么意思,比如web服务器?在任何情况下,基本上就是我在下面这个小盒子里和答案里说的。在我看来,在db内部做任何不涉及crontab的事情都很好。谢谢你让我走上了正确的道路,我对我要做的事情有一个清晰的愿景:)听起来不错。当你找到最适合你的答案时,给它一个绿色的复选标记。请稍等,可能还有其他好的答案。请使用PHP、Python或其他语言的编程脚本,而不是存储过程或触发器事件。数据库应该从业务逻辑中抽象出来。它们必须对应用程序不可知,只在那里存储和保护关系数据。
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;
show events\G; -- <--------- I like this one from mysql> prompt
show events; -- <--------- from workbench / sqlyog


*************************** 1. row ***************************
                  Db: so_gibberish
                Name: set_trips_finished
             Definer: GuySmiley@localhost
           Time zone: SYSTEM
                Type: RECURRING
          Execute at: NULL
      Interval value: 1
      Interval field: MINUTE
              Starts: 2015-08-23 00:00:00
                Ends: NULL
              Status: ENABLED
          Originator: 1
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: utf8_general_ci