在mysql上使用current_date检查约束

4dbbbstv  于 2023-03-07  发布在  Mysql
关注(0)|答案(1)|浏览(110)

这可能是一个可怕的问题,但我遇到了一个限制,这是应该防止用户被添加时,他们小于18岁的麻烦。
约束如下所示:alter table client add constraint age check(datediff(current_date, born_date)/ 365 >= 18);
这样,我就可以得到从现在到客户出生的天数差,除以365,我们就得到了年数。
但是当我尝试添加这个约束时,弹出一条错误消息:
错误代码:3814.检查约束'age'的表达式包含不允许的函数:curdate. *
据我所知,current_date只是curdate()函数的一个调用,我也尝试过像now()这样的其他函数,也尝试过在检查之外声明一个datetime变量并给它now()值,但都没有成功。
我还检查了w3resource中的一些其他日期函数,但是例如localtime()恰好与now()完全相同,当我使用它时,或者curdate()和current_date()
我用的是mysql8
谢谢你的帮助!
编辑--这必须用约束来完成(这是我的一个老师给他的学生的一个问题,让我们为即将到来的考试做准备)。我也知道约束只接受确定性函数,而所有的日期函数,如now()或current_date()都是不确定的。但是,我如何才能在约束中得到"now"的日期呢?

omhiaaxx

omhiaaxx1#

我相信您可以尝试使用不同的列作为约束。添加一个名为age的新列,它会预先计算它,然后添加约束。
例如:

birthdate DATETIME,    
register_time DATETIME DEFAULT CURRENT_TIMESTAMP,
age INT AS (timestampdiff(YEAR,register,birthdate)),
CONSTRAINT person_birthdate CHECK (birthdate is not null),
CONSTRAINT person_age CHECK (age>=18),

相关问题