在哪里以及如何给数据库列自动更新
问题描述:
我有一个表具有以下属性name
,price
,start_date
,end_date
。这里start_date
和end_date
表示产品的价格从何时到何时存在的日期。在end_date
到期后,我需要price
列的特定行去0.有什么办法可以实现相同的?数据库是MySQL,我使用PHP作为服务器端脚本。在哪里以及如何给数据库列自动更新
答
不,不是自动的。您将不得不通过执行如下所示的UPDATE
声明手动执行此操作。你可以和配置周期性作为SQL作业运行这个
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;
如果您使用视图访问表格,则该列会自动调整为当前时间。否则,您需要安排一个事件来修改日期 - 并且在查询过期时,结束日期和时间之间肯定会有滞后。