在哪里以及如何提供数据库列的自动更新

where and how to give Auto updation of database column

我有一个 table,具有以下属性 namepricestart_dateend_date。这里 start_dateend_date 表示从何时到何时存在该产品价格的日期。 end_date 到期后,我需要该特定行的 price 列变为 0。有什么方法可以实现相同的功能吗?数据库是 MySQL,我使用 PHP 作为服务器端脚本。

不,不是自动的。您必须通过执行如下所示的 UPDATE 语句手动执行此操作。您也可以定期将此配置为 运行 作为 SQL Job

update pricetbl
set price = 0
where end_date = now();

您也可以为此目的配置一个 Event(示例)

delimiter |

CREATE EVENT updatePrice_daily
    ON SCHEDULE
      EVERY 1 DAY
    DO
      BEGIN
       UPDATE pricetbl SET price = 0 WHERE end_date = NOW();
      END |

delimiter ;

您可以使用视图执行此操作:

create view v_pricetbl as
    select (case when end_date > now() then 0 else price end) as price,
           start_date, end_date
    from atable;

如果您使用视图访问 table,则该列会自动调整为当前时间。否则,您将需要安排一个事件来修改日期——结束日期和时间之间必然会有延迟,此时查询将为 out-of-date.