根据其他列值检查约束

时间:2019-02-15 09:20:17

标签: mysql sql check-constraints

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

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

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

谢谢。

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您可以添加如下检查约束:

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

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