2014-01-18 51 views
6

我在表中有一个名为“Patient Type”的列。我想确保只有2个值可以插入到列中,不论是opd还是允许的,除此之外,所有其他输入都无效。限制列只接受2个值

下面是什么,我想

enter image description here

我如何确保该列只接受“门诊”或“承认”作为“病人类型”列中的数据的例子。

回答

6

您需要检查约束。

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

你需要检查它是否可以工作,尽管在MySQL中尤其如此。
似乎它不起作用(或者至少几年前没有)。

MySQL CHECK Constraint

CHECK constraint in MySQL is not working

MySQL CHECK Constraint Workaround

不知道它现在固定。

如果不工作,请使用触发器而不是检查约束。

+1

MySQL 5.7的[manual](http://dev.mysql.com/doc/refman/5.7/en/create-table.html)仍然说:“CHECK子句被解析,但被所有存储引擎忽略。” –

+0

我认为这不是一个好的解决方案请检查我的评论以回答@MarkD – GRC

5

我不是MySQL的开发者,但我认为这可能是你要找的。 ENUM

+2

是的,ENUM是一个适用于这个特定问题的解决方案,比CHECK约束更容易。尤其是CHECK在MySQL中不起作用,您需要一个触发器。 ENUM也更容易理解,所以它更好地记录了列的约束条件。 –

+1

你可能不是一个MySQL开发者,但你提供了比接受的更好的解决方案。这就是为什么ENUM类型将所有可能的值存储在表格描述中而不是表格数据中,ENUM表示枚举并且所有存储的数字都是1 2 3等等,当使用枚举时。如果使用约束,数据实际上是存储的。当你有动态约束时,限制是有意义的,在这里NO。 – GRC

2

创建表时,使用Enum作为patientType列的数据类型。 Create table [tablename](firstname varchar(size),[othercolumns],patientType ENUM('OPD','Admitted'))

相关问题