MySQL:约束一组列,这样至少有一列不是NULL

Gor*_*onM 6 mysql constraints

我想要一个包含两列的SQL表.一个是另一个表的键,另一个是字符串文字.这个想法是可以准确输入电话号码(在这种情况下使用电话簿表中的ID)或作为通配符(使用字符串文字).

这意味着表中的一列将保存一个值,另一列将保留NULL.

是否可以以一种列必须具有值,另一列必须为NULL的方式约束表?如果两列都为NULL或两者都有值,则该行无效.

我有一种感觉,MySQL无法做到这一点(因为它似乎没有一个全面的工具箱,当涉及到约束),但它不会伤害问.

Akx*_*kxe 5

自从GENERATED列成为一个东西以来,这是可能的。

CREATE TABLE `test_multiple_not_null` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL,
  `idOne` int(11) DEFAULT NULL,
  `idTwo` int(11) DEFAULT NULL,
  `not_null_constrain` int(11) GENERATED ALWAYS AS (coalesce(`idOne`,`idTwo`)) VIRTUAL NOT NULL,
  PRIMARY KEY (`id`)
);
Run Code Online (Sandbox Code Playgroud)

由于每次插入行时,生成的列必须运行以查看它是否满足NOT NULL约束,如果违反此限制,它将回复1048: Column 'not_null_constrain' cannot be null


tit*_*boa 4

我不知道有什么方法可以强制执行这种限制。

作为解决方法,您可以考虑使用两个不同的列:如果您有一个数据列(包含电话簿 ID 或字符串文字),另一列用于数据类型(“精确”或“通配符”),则您可以可以为两列设置 NOT NULL 约束。一个明显的缺点是您不能再对电话簿表施加 FK 约束。