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