我有一个带有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
有人对我如何进行这项工作有想法吗?
您不能用check
约束来做您想做的事。限制取决于您需要使用不确定性函数。文档中的确切语言是:
- 允许使用文字,确定性内置函数和运算符。如果给定表中的相同数据,则独立于所连接的用户,如果多次调用产生相同的结果,则该函数为确定性函数。不确定性且未通过此定义的函数示例:CONNECTION_ID(),CURRENT_USER(),NOW()。
您可以使用触发器来代替。或者,您可以设置每日工作以删除不匹配的记录。
上面是一些抽象。基本规则是,check
约束不是简单地在插入数据时对其进行验证;它是对数据的唯一验证。它说明表上始终为真的条件。年龄显然会随着时间而变化,因此(理论上)可以在不对表进行任何更改的情况下违反约束。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句