如何设置它以便 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.
我要开场白说发生的事情似乎不是一个好的做法,但这是我和其他一些工程师已经达到的结果。
我有一个 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.