如何设置它以便 MySQL 中的 2 列中的 1 列为 NULL

How to set it so that 1 of 2 columns is NULL in MySQL

我要开场白说发生的事情似乎不是一个好的做法,但这是我和其他一些工程师已经达到的结果。

我有一个 table,其中有一列包含映射到产品的外键。我想添加第二列,它是映射到产品类别的外键。但是,我只想在产品本身没有填写的情况下填写产品类别。同样,如果填写了产品类别,我不希望填写产品。

是否有某种方式可以表达:

if(colA is NULL)
   colB is NOT NULL
if(colB is NULL)
   colA is NOT NULL

提前感谢您的帮助。

因为它是 MySQL,我想创建一个 BEFORE INSERT OR UPDATE 触发器是最好的选择。示例代码:

CREATE TRIGGER Validate_Trigger BEFORE INSERT OR UPDATE ON MyTable FOR EACH ROW
BEGIN
    DECLARE msg VARCHAR(255);
    IF new.colA IS NOT NULL AND new.colB IS NOT NULL THEN        

        -- Disallowed: yhrow exception from trigger

        SET msg = 'Validate_Trigger: only one column can be NOT NULL: (colA, colB)';
        SIGNAL sqlstate '45000' SET message_text = msg;
    END IF;
END;

通常在这种情况下,您会创建一个 CHECK 约束,如下所示:

ALTER TABLE MyTable 
  ADD CONSTRAINT ConstraintName 
           CHECK (colA IS NULL OR colB IS NULL)

这里的问题是,从 5.7 版开始,MySQL ignores CHECK constraints:

The CHECK clause is parsed but ignored by all storage engines.