MySQL: ограничение набора столбцов, поэтому хотя бы один из них не равен NULL - PullRequest
6 голосов
/ 08 апреля 2011

Я хочу иметь таблицу SQL с двумя столбцами. Один является ключом в другой таблице, другой содержит строковый литерал. Идея состоит в том, что номера телефонов можно вводить либо точно (в этом случае используется идентификатор в таблице телефонной книги), либо в качестве подстановочного знака (в котором используется строковый литерал).

Это означает, что один столбец в таблице будет содержать значение, а другой - NULL.

Можно ли ограничить таблицу таким образом, что один столбец должен иметь значение, а другой - NULL? Если оба столбца имеют значение NULL или оба имеют значение, строка недопустима.

У меня такое ощущение, что MySQL не может этого сделать (так как у него, кажется, нет исчерпывающего набора инструментов, когда речь идет об ограничениях), но это не помешает спросить.

Ответы [ 2 ]

4 голосов
/ 08 апреля 2011

Я не знаю, как применить такое ограничение.

В качестве обходного пути вы можете рассмотреть возможность использования двух разных столбцов: если у вас есть один столбец для данных - содержащий идентификатор телефонной книги или строковый литерал, и другой столбец для типа данных - либо «точный», либо'подстановочный знак' - вы можете установить ограничение NOT NULL для обоих столбцов.Очевидным недостатком является то, что вы больше не можете иметь ограничения FK для таблицы телефонных книг.

2 голосов
/ 24 апреля 2016

Вы можете запускать триггеры перед вставкой, чтобы проверить значения и определить, должна ли вставка или обновление произойти или нет.Хороший пример того, как создавать такие триггеры, можно найти здесь: https://dba.stackexchange.com/questions/43284/two-nullable-columns-one-required-to-have-value

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...