【问题标题】:Check Constraint based on other column value根据其他列值检查约束
【发布时间】:2019-02-15 09:20:16
【问题描述】:

我有一个名为 Table1 的表格,其中包含三列 col1col2col3。 col1 可以具有三个值之一(1 或 2 或 3)。

我需要添加一个检查约束来检查,如果 col1 的值为 1,那么 col2 和 col3 的值应该相同,否则如果 col1 的值为 2 或 3,那么 col2 和 col3 的值可能相同也可能不同.

谁能告诉我如何为此添加约束?

提前致谢。

【问题讨论】:

    标签: mysql sql check-constraints


    【解决方案1】:

    您可以像这样添加检查约束:

    ALTER TABLE Table1 ADD CONSTRAINT chk_table1_cols
        CHECK ( (col1 = 1 AND col2 = col3) OR (col1 IN (2, 3)) );
    

    请注意,“相同”假定值不是NULL。如果您想将 NULL 值视为相等,则可以添加该逻辑。

    【讨论】:

      【解决方案2】:

      您可以使用一系列逻辑运算符来表达这些条件:

      (col IN (1, 2, 3)) AND (col2 = col3 OR col1 IN (2, 3)
      

      【讨论】:

        【解决方案3】:

        我没有验证(我没有 MySql),但在 Oracle 中以下工作:

        ALTER TABLE Table1 ADD
        (
          CONSTRAINT CHK_1 CHECK ((col1 BETWEEN 1 AND 3) AND (col1 <> 1 OR col2=col3))
        )
        

        【讨论】:

        • 我可以告诉你这在 MySQL 中不起作用,相反,你可以在 MySQL 中使用带有检查选项的视图,它可以执行 same
        • @RaymondNijland 你可能是对的(我对 mysql 不是很熟悉)但w3schools.com/sql/sql_check.asp 说它应该可以工作。
        • 等待... MySQL 8.0.16(尚未发布,普遍可用)接缝将支持它finally .. 对于一般情况,我不建议将 w3schools 用于 SQL文档。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多