如何在出生日期字段中计算年龄计算的mysql上的Check约束并验证年龄大于18

时间:2017-06-24 11:58:13

标签: mysql sql

我使用mysql名称创建了表,其中有六个属性id,name,lastname,dob(存储在Date数据类型中),性别,城市,我希望该值在dob(出生日期)中输入大于18.如何设置此约束请帮助

2 个答案:

答案 0 :(得分:0)

MySQL不支持检查约束。因此,在MySQL中执行此操作的唯一方法是创建触发器或将插入包装在存储过程中。

您将使用的具体逻辑是:

dob <= curdate() - interval 18 year

因此,在几乎任何其他数据库中,这看起来都像:

alter table t add constraint chk_t_dob check (dob <= curdate() - interval '18' year);

(注意:日期操作因数据库而异。)

答案 1 :(得分:0)

请考虑以下内容,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 |
+------------+