Sql 如何创建一个列只有3个可能的给定值的表?

Sql 如何创建一个列只有3个可能的给定值的表?,sql,mysql,Sql,Mysql,我正在用MySQL创建一个SQL数据库 我需要一个只有3个可能值的列:“Total”“Hours”“ondemand”。我的意思是用户必须选择这三个值中的一个,他将无法选择其他值 我该怎么做呢?请参阅ENUM类型 i、 e 在Oracle中,可以为列创建检查约束,如下所示- ALTER TABLE yourtable add CONSTRAINT yourcolumn CHECK (yourcolumn IN ('Total', 'Hours', 'OnDemand')); 在使用其他数

我正在用MySQL创建一个SQL数据库

我需要一个只有3个可能值的列:“Total”“Hours”“ondemand”。我的意思是用户必须选择这三个值中的一个,他将无法选择其他值


我该怎么做呢?

请参阅
ENUM
类型

i、 e


在Oracle中,可以为列创建检查约束,如下所示-

ALTER TABLE yourtable
add CONSTRAINT yourcolumn
   CHECK (yourcolumn IN ('Total', 'Hours', 'OnDemand'));

在使用其他数据库时,应该有等效的检查。

如果要将其构建到表本身中,则需要使用检查约束,如下所示:

CREATE TABLE YourTable
(
  YourColumn VARCHAR(50) NOT NULL,
  CONSTRAINT ck_YourConstraint CHECK (YourColumn = 'Total' OR YourColumn = 'Hours' OR YourColumn = 'OnDemand')
)

但是,您可能希望进一步规范化数据库设计,并将其放入应用程序使用的单独查找表中。这将允许您在将来以任何方式修改这些查找时具有极大的灵活性。

注意:仍然可以使用空值而不是给定的三个值。哦,太好了!谢谢。。。。。但是…?我如何在MySQL Workbench(MySQL administrator 2010)上创建具有这些值的枚举列?我只是好奇,我不知道MySQL,如果我想在列中添加一个可能的值,我必须做什么?是否可以更改列?@johnbk是的,您可以像更改任何其他列一样更改它。当然,如果删除当前使用的值,您可能会遇到问题。MySQL语法中允许使用CHECK约束,但会忽略它。“已分析CHECK子句,但被所有存储引擎忽略。”来自
CREATE TABLE YourTable
(
  YourColumn VARCHAR(50) NOT NULL,
  CONSTRAINT ck_YourConstraint CHECK (YourColumn = 'Total' OR YourColumn = 'Hours' OR YourColumn = 'OnDemand')
)