MySQL从生日检查年龄

Arès:

我有一个带有birthdate属性的MySQL表

CREATE TABLE IF NOT EXISTS `MyTable` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `birthdate` date NOT NULL,
   PRIMARY KEY (`ID`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

我想检查年龄小于20的所有插入行。

我试图通过此检查来做到这一点:

CONSTRAINT CHK_Age CHECK (DATEDIFF(date_naissance,CURDATE())/365.25 >=20)

但可悲的是,它无法正常工作并且我收到此错误 function or expression CURDATE() cannot be used in check

有人对我如何进行这项工作有想法吗?

戈登·利诺夫(Gordon Linoff):

您不能用check约束来做您想做的事限制取决于您需要使用不确定性函数。文档中的确切语言是:

  • 允许使用文字,确定性内置函数和运算符。如果给定表中的相同数据,则独立于所连接的用户,如果多次调用产生相同的结果,则该函数为确定性函数。不确定性且未通过此定义的函数示例:CONNECTION_ID(),CURRENT_USER(),NOW()。

您可以使用触发器来代替。或者,您可以设置每日工作以删除不匹配的记录。

上面是一些抽象。基本规则是,check约束不是简单地在插入数据时对其进行验证;它是对数据的唯一验证。它说明表上始终为真的条件年龄显然会随着时间而变化,因此(理论上)可以在不对表进行任何更改的情况下违反约束。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章