You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让MySQL的days_on_shelf字段基于date_added自动持续更新?

MySQL实现基于入库日期自动计算在架天数的方案

最优方案:查询时实时计算(不存储派生字段)

不建议将days_on_shelf作为物理字段存储,因为它是由date_added和当前日期派生的计算值,直接在查询时计算更高效,还能避免数据不一致的问题。

示例查询SQL:

SELECT 
  date_added,
  DATEDIFF(CURDATE(), date_added) AS days_on_shelf
FROM products;

如果需要频繁使用这个计算值,可以创建一个视图简化操作:

CREATE VIEW product_shelf_stats AS
SELECT 
  id,
  product_name,
  date_added,
  DATEDIFF(CURDATE(), date_added) AS days_on_shelf
FROM products;

之后直接查询视图即可:SELECT * FROM product_shelf_stats;

若必须存储days_on_shelf字段:使用MySQL事件定时更新

如果业务需求要求必须将该值存储为物理字段,可以通过MySQL的事件调度器实现每日自动更新:

  1. 首先确保MySQL事件调度器已开启:
SET GLOBAL event_scheduler = ON;

(若要永久生效,需在my.cnf/my.ini中添加event_scheduler = ON并重启服务)

  1. 创建每日更新的事件:
CREATE EVENT update_days_on_shelf
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_DATE + INTERVAL 1 DAY
DO
  UPDATE products 
  SET days_on_shelf = DATEDIFF(CURDATE(), date_added);

这个事件会每天自动执行一次,将所有商品的days_on_shelf更新为当前日期与入库日期的差值。

注意事项

  • 触发器无法实现自动递增:触发器仅在date_added字段被修改时触发,无法随时间自动更新days_on_shelf,因此不适合这个场景。
  • 存储派生字段的风险:如果服务器时间异常或事件调度器停止,会导致days_on_shelf数据不准确,需要额外维护。

内容的提问来源于stack exchange,提问作者AlanGood113

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 18:51:32