2017-06-24 816 views

回答

0

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

,你会使用特定的逻辑是:

dob <= curdate() - interval 18 year 

所以,在几乎任何其他数据库,这看起来是这样的:

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

(注:最新的操作数据库的不同而不同。 )

+0

...或者只是使用查询 – Strawberry

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 | 
+------------+