Как не разрешить дублирование определенного значения в базе данных - PullRequest
0 голосов
/ 13 февраля 2019

поэтому я хотел создать столбец, скажем, master_user, поэтому этот столбец master_user имеет битовые значения, 0 и 1. Я хотел добиться того, чтобы столбец master_user имел только одно значение '1', поскольку есть толькоодин master_user.Вы можете иметь несколько значений «0», но не «1».

В SQL Server вы можете сделать так:

CREATE UNIQUE NONCLUSTERED INDEX [IX_master_user] ON [user]
(
    [master_user] ASC
)
WHERE ([master_user]=(1));

Как мне сделать то же самое для MySQL?

Спасибо.

ОБНОВЛЕНИЕ: MySQL не поддерживает фильтрованный индекс и условный индекс

1 Ответ

0 голосов
/ 13 февраля 2019

Самым простым подходом, вероятно, будет использование 1 для обозначения главного пользователя и null для обозначения неосновного.Поскольку null s не являются значениями (их отсутствие), они не участвуют в уникальных индексах, и наличие простого индекса unique для столбца master_user может помочь.

Если вам абсолютно необходимо сохранить 0, вы можете добавить сгенерированный столбец, который заменяет 0 на null, и сделать его уникальным, с тем же эффектом:

CREATE TABLE users (
  username VARCHAR(10) PRIMARY KEY,
  master_user BIT NOT NULL,
  master_user_nullable BIT AS (CASE master_user WHEN 1 THEN 1 END) STORED UNIQUE
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...