2017-06-24 5 views
0

mysql nameを使用してテーブルを作成しました。id、name、lastname、dobタイプ)、性別、都市と私はdob(生年月日)に入力する値が18より大きいようにします。この制約を設定するにはどうすればよいですか追加する方法mysqlの生年月日フィールドから計算した年齢をチェックし、年齢が18歳を超えていることを確認する制約を追加する

+2

何を試しましたか?どのように失敗しましたか? –

答えて

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 | 
+------------+ 
関連する問題