MySQL, возможно, чтобы два поля были пустыми или не пустыми? - PullRequest
0 голосов
/ 30 августа 2018

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

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 ]

0 голосов
/ 30 августа 2018

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

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

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

0 голосов
/ 30 августа 2018

Вы можете использовать ограничение 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)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...