首页 > 解决方案 > 如何保持我的“有效期”行始终相对于“到期日期”行进行更新?

问题描述

这是我的数据库survey表: 在此处输入图像描述

我学会了使用CURDATE()and DATEADD(),所以表格现在可以自动计算survey_dateand its expiration_date

但我也想为我的validity专栏添加一个值。
我的有效性列是BIT(1).
我希望 1 代表有效调查,0 代表无效调查。

如何使该validity列与我的列的关系始终正确expiration_date
我希望它根据日期而改变,所以它一直都是正确的,而不是只有在我第一次插入行时才正确。

谢谢!

标签: mysqlsqldatabasedatabase-designmysql-workbench

解决方案


如果您可以使用生成的列添加它会很好

alter table survey
    add validity bit generated always as (expiration_date < now());

但是,这是不允许的,因为now()它是一个 volatile 函数(即,每次调用它都会改变值)。

您需要使用视图:

create view v_survey as 
    select s.*,
           (expiration_date < now()) as is_valid
    from survey;

推荐阅读