【问题标题】:Restricting a column to accept only 2 values限制一列只接受 2 个值
【发布时间】:2014-02-07 17:28:08
【问题描述】:

我在表格中有一个名为“患者类型”的列。我想确保只能将 2 个值插入到列中,无论是 opd 还是承认,除此之外,所有其他输入均无效。

以下是我想要的示例

如何确保该列仅接受“opd”或“admitted”作为“Patient Type”列的数据。

【问题讨论】:

    标签: mysql sql database input


    【解决方案1】:

    我不是 MySQL 开发人员,但我认为这可能是您正在寻找的。 ENUM

    【讨论】:

    • 是的,ENUM 是一种适用于这个特定问题的解决方案,并且比 CHECK 约束要容易得多。特别是因为 CHECK 在 MySQL 中不起作用并且您需要一个触发器。 ENUM 也更容易理解,因此它可以更好地记录列的约束。
    • 您可能不是 MySQL 开发人员,但您提供的解决方案比接受的解决方案要好得多。这就是为什么,ENUM 类型将所有可能的值存储在表描述中而不是表数据中,ENUM 代表枚举,使用枚举时存储的都是数字 1 2 3 等等。如果使用了约束,数据实际存储在哪里。当你有动态约束时,约束是有意义的,在这里没有。
    【解决方案2】:

    你需要一个检查约束。

    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

    不确定现在是否已修复。

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

    【讨论】:

    • MySQL 5.7 的manual 仍然说:“CHECK 子句已解析但被所有存储引擎忽略。”
    • 我认为这不是一个好的解决方案,请查看我的评论以回答@MarkD
    • 根据为此提交的票证,CHECK 在 MySQL 8.0.15 中已修复
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-07
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      相关资源
      最近更新 更多