【问题标题】:Check Constraint based on other column value根据其他列值检查约束
【发布时间】:2019-02-15 09:20:16
【问题描述】:
我有一个名为 Table1 的表格,其中包含三列 col1、col2、col3。
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文档。