Mysql 将列限制为仅接受2个值

Mysql 将列限制为仅接受2个值,mysql,sql,database,input,Mysql,Sql,Database,Input,我在表中有一个名为“患者类型”的列。我想确保只有2个值可以插入到列中,opd或ALCOMMENT,除此之外,所有其他输入都无效 下面是我想要的一个例子 如何确保该列只接受“opd”或“承认”作为“患者类型”列的数据。我不是MySQL开发人员,但我认为这可能是您需要的。 您需要一个检查约束 ALTER TABLE [TableName] ADD CONSTRAINT my_constraint CHECK (PatientType = 'Admitted' OR PatientType = '

我在表中有一个名为“患者类型”的列。我想确保只有2个值可以插入到列中,opd或ALCOMMENT,除此之外,所有其他输入都无效

下面是我想要的一个例子


如何确保该列只接受“opd”或“承认”作为“患者类型”列的数据。

我不是MySQL开发人员,但我认为这可能是您需要的。
您需要一个检查约束

ALTER TABLE [TableName] ADD CONSTRAINT 
my_constraint CHECK (PatientType = 'Admitted' OR PatientType = 'OPD')
您需要检查它是否在MySQL中工作,特别是到今天为止。
似乎它不起作用(或者至少几年前不起作用)

不知道现在是否修好了


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

创建表时,将枚举用作patientType列的数据类型。
ALTER TABLE [TableName] ADD CONSTRAINT 
my_constraint CHECK (PatientType = 'Admitted' OR PatientType = 'OPD')

Create table[tablename](firstname varchar(size),[othercolumns],patientType ENUM('OPD','acempted'))

MySQL 5.7的代码仍然说:“CHECK子句被解析,但被所有存储引擎忽略了。”我认为这不是一个好的解决方案,请检查我的注释,并通过@markdac来回答根据为此提交的票证,检查在MySQL 8.0.15中得到了修复是的,ENUM是一个解决这个特定问题的解决方案,比检查约束简单得多。特别是当CHECK在MySQL中不起作用,您需要一个触发器时。ENUM也更容易理解,因此它更好地记录了列的约束。您可能不是MySQL开发人员,但您提供的解决方案比公认的要好得多。这就是为什么,枚举类型将所有可能的值存储在表描述中,而不是存储在表数据中,ENUM表示枚举,当使用枚举时,存储的所有值都是数字1、2、3等等。如果使用约束,则实际存储数据。当您有动态约束时,约束是有意义的,在这里没有。