如何添加检查约束MySQL的年龄计算从出生日期字段,并验证该年龄大于18
问题描述:
我已经创建了使用mysql名称人有6个属性ID,名称,姓氏,DOB(存储在日期数据类型),性别,城市,我希望在dob(出生日期)输入的值大于18.如何设置此约束请帮助如何添加检查约束MySQL的年龄计算从出生日期字段,并验证该年龄大于18
答
MySQL不支持检查约束。所以,在MySQL中执行此操作的唯一方法是创建触发器或将插入器包装到存储过程中。
,你会使用特定的逻辑是:
dob <= curdate() - interval 18 year
所以,在几乎任何其他数据库,这看起来是这样的:
alter table t add constraint chk_t_dob check (dob <= curdate() - interval '18' year);
(注:最新的操作数据库的不同而不同。 )
+0
...或者只是使用查询 – Strawberry
答
考虑下面的,这个在2017年6月24日...
CREATE TABLE dobs(dob DATE NOT NULL);
INSERT INTO dobs (dob)
SELECT '2012-01-01' x FROM (SELECT 1) a WHERE FLOOR(DATEDIFF(NOW(),'2012-01-01')/365.24) >= 18;
INSERT INTO dobs (dob)
SELECT '1975-01-01' x FROM (SELECT 1) a WHERE FLOOR(DATEDIFF(NOW(),'1975-01-01')/365.24) >= 18;
INSERT INTO dobs (dob)
SELECT '1999-06-25' x FROM (SELECT 1) a WHERE FLOOR(DATEDIFF(NOW(),'1999-06-25')/365.24) >= 18;
INSERT INTO dobs (dob)
SELECT '1999-06-24' x FROM (SELECT 1) a WHERE FLOOR(DATEDIFF(NOW(),'1999-06-24')/365.24) >= 18;
SELECT * FROM dobs;
+------------+
| dob |
+------------+
| 1975-01-01 |
| 1999-06-24 |
+------------+
你有什么试过,它是如何失败? –