使用 MySQL 表中的特定新数据计划更新



我想知道是否有任何方法可以安排更新,在旧表数据到期时更新表数据。

例如,John Smith 在 X 公司有一项活跃的服务,但希望升级该服务。但是,由于他当前协议的限制,新服务要到X天才能生效。

有没有办法在MySQL中存储新数据并在月底更新它?如果是,这是否需要我存储另一个包含新订单数据的表?

通常,通过在services表中放置start_dateend_date列来处理将来更改内容的要求。

然后,您可以使用以下方法找到当前处于活动状态的服务行

SELECT user_id, whatever, whatelse
FROM services
WHERE (start_date IS NULL OR start_date <= NOW())
AND (end_date IS NULL OR end_date > NOW());

如果需要,可以创建一个名为active_services的视图,该视图会自动筛选当前活动服务的services表。

CREATE VIEW active_services AS
SELECT *
FROM services
WHERE (start_date IS NULL OR start_date <= NOW())
AND (end_date IS NULL OR end_date > NOW());

注意 -- 在此设计中,end_date不包含服务处于活动状态的最后一刻,而是它变为非活动状态的第一时刻。如果end_date为 null,则服务将继续处于活动状态。

要在下月初更改服务或user_id,请执行以下两个操作:

UPDATE service
SET end_date = LAST_DAY(NOW()) + INTERVAL 1 DAY
WHERE user_id = <<user id you wish to change >>
INSERT INTO service (start_date, user_id, whatever, whatelse)
VALUES (LAST_DAY(NOW()) + INTERVAL 1 DAY,
<<user id you wish to change >>,
<<whatever>>, 
<<whatelse>>;

然后,当下个月到来时,active_services视图将返回新服务。 这比依赖精确定时的每月作业要强大得多。如果您每月执行作业,则可以随时运行。它只是清理过期的服务。

您可以使用 MySQL 事件在指定时间运行特定作业。(但是一些共享的MySQL系统不允许你使用事件。

有趣的是,mysql 有事件调度器查看文档。

下面是一个最小 CREATE EVENT 语句的示例:

CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
UPDATE myschema.mytable SET mycol = mycol + 1;

前面的语句创建一个名为 myevent 的事件。此事件在创建后一小时执行一次,方法是运行将 myschema.mytable 表的 mycol 列的值递增 1 的 SQL 语句。

如果是,这是否需要我有另一个表存储了新订单数据

我不确定您是否需要另一张桌子左右...这完全取决于你希望它如何成为一个

最新更新