在哪里以及如何提供数据库列的自动更新
where and how to give Auto updation of database column
我有一个 table,具有以下属性 name
、price
、start_date
、end_date
。这里 start_date
和 end_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.
我有一个 table,具有以下属性 name
、price
、start_date
、end_date
。这里 start_date
和 end_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.