Могу ли я сделать столбец в таблице, только одно значение "истина", а все остальные строки должны быть "ложными",
В 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 и не могут быть ложными, поскольку это также считается уникальным значением.
(Это действительно не то, для чего предназначены индексы)
Ответ 3
конкретный столбец может принимать только значения "true" или "false".
Используйте Datatype для столбца либо boolean, либо tiny-int
2 и только одна строка должна иметь значение "true"?
вам нужно написать запрос, который обновляет все столбцы строк до значения false, кроме одного, установленного в true
Ответ 4
Задайте тип данных столбца "boolean"; затем добавьте триггер-функцию, которая устанавливает для строки, в которой вы хотите быть всегда "true", true при обновлении.