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