2014-01-18 2 views
6

テーブルに「Patient Type」という列があります。私は2つの値だけがカラムに挿入できることを確かめたい、それ以外のすべての入力は有効ではない。2つの値のみを受け入れるように列を制限する

以下は、私は列が唯一の「OPD」または「患者タイプ」列のデータとして「入院」を受け入れていることを確認するにはどうすればよい

enter image description here

を望むものの一例です。

答えて

6

チェック制約が必要です。

ALTER TABLE [TableName] ADD CONSTRAINT 
my_constraint CHECK (PatientType = 'Admitted' OR PatientType = 'OPD') 

今日は特にMySQLでも動作するかどうかを確認する必要があります。
それは動作しないようです(少なくとも数年前にはなかったようです)。それが今で固定だわからない場合

MySQL CHECK Constraint Workaround

CHECK constraint in MySQL is not working

MySQL CHECK Constraint

動作しない場合は、チェック制約の代わりにトリガーを使用してください。

+1

MySQL 5.7の[マニュアル](http://dev.mysql.com/doc/refman/5.7/en/create-table.html)には、「CHECK節は解析されますが、すべてのストレージエンジンで無視されます」と表示されます。 –

+0

これはいい解決策ではないと思う@MarkD – GRC

5

私はMySQLの開発者ではありませんが、これはあなたが探しているものだと思います。 ENUM

+2

はい、ENUMはこの特定の問題に対応し、CHECK制約よりはるかに簡単なソリューションです。特にMySQLではCHECKが機能しないため、トリガーが必要です。 ENUMの理解もはるかに容易であるため、列の制約を文書化する方がはるかに優れています。 –

+1

あなたはMySQLデベロッパーではないかもしれませんが、受け入れられたソリューションよりはるかに優れたソリューションを提供しました。そして、ここでは、ENUM型はテーブル記述ではなくテーブル記述に可能なすべての値を格納し、ENUMは列挙型を表し、すべてが列挙型が使用されるときには1 2 3のように格納されます。制約が使用される場合、データは実際に格納されます。動的制約がある場合、制約は意味があります。 – GRC

2

表の作成時に、patientType列のデータ型としてEnumを使用します。 Create table [tablename](firstname varchar(size),[othercolumns],patientType ENUM('OPD','Admitted'))

関連する問題