Могу ли я сделать столбец в таблице, только одно значение "истина", а все остальные строки должны быть "ложными",

В MySQL, могу ли я установить ограничение, как показано ниже на уровне базы данных?

Мне нужно убедиться 1. конкретный столбец может принимать только значения "истина" или "ложь". 2. И только одна строка должна иметь "истинное" значение?

Ответ 1

Вместо того, чтобы иметь атрибут boolean в таблице, вы можете иметь другую таблицу, содержащую одну строку, и указывает на строку в исходной таблице, которую вы считаете истинным.

Изменение истинного значения - это вопрос обновления внешнего ключа в таблице TrueRow.

Ответ 2

В MySQL уникальный индекс будет игнорировать любые значения NULL. Так что вы можете использовать немного взлома.

Вы можете добавить столбец bit со значением NULL (который может иметь только значение 1 или 0):

ALTER TABLE mytable 
  ADD COLUMN 'is_default' BIT NULL,
  ADD UNIQUE INDEX 'is_default_UNIQUE' ('is_default' ASC);

На этом этапе одна строка может быть 1 (ИСТИНА), и попытка добавить еще одну строку, которая также ИСТИНА, приведет к ошибке:

1062: Duplicate entry '\x01' for key 'is_default_UNIQUE'

Единственный улов заключается в том, что все остальные строки должны быть NULL и не могут быть ложными, поскольку это также считается уникальным значением.

Example table data

(Это действительно не то, для чего предназначены индексы)

Ответ 3

  • конкретный столбец может принимать только значения "true" или "false".

    Используйте Datatype для столбца либо boolean, либо tiny-int

2 и только одна строка должна иметь значение "true"?

вам нужно написать запрос, который обновляет все столбцы строк до значения false, кроме одного, установленного в true

Ответ 4

Задайте тип данных столбца "boolean"; затем добавьте триггер-функцию, которая устанавливает для строки, в которой вы хотите быть всегда "true", true при обновлении.