MySQL, можно ли запретить двум полям быть NULL или не NULL?


Простая таблица:

ID, NAME, POST_ID, GROUP_ID

Либо POST_ID, либо GROUP_ID должны быть установлены, но никогда не оба из них, ни один из них. Итак,

Существуют допустимые случаи:

ID, NAME, POST_ID, GROUP_ID
x,   y,   1,       NULL
x,   y,   NULL,    4

И недопустимые случаи:

ID, NAME, POST_ID, GROUP_ID
x,   y,   NULL,    NULL
x,   y,   4,       4

Можно ли установить такое сложное правило ограничения?

2 2

2 ответа:

Вы должны использовать триггеры для создания и обновления событий и trhow исключение, когда условие (COALESCE(POST_ID, GROUP_ID) IS NULL OR (POST_ID IS NOT NULL AND GROUP_ID IS NOT NULL)) происходит

Вот ответ на ваш вопрос: любые или ненулевые ограничения в MySQL

Это процедура, немного меняющая синтаксис в зависимости от версии MySql.

При создании таблицы можно использовать ограничение CHECK:

CREATE TABLE Persons (
    ID int NOT NULL,
    NAME varchar(255) NOT NULL,
    POST_ID int,
    GROUP_ID int,
    CHECK (POST_ID IS NULL XOR GROUP_ID IS NULL)
);