Составные ключи MySql и нулевые значения - PullRequest
14 голосов
/ 21 июня 2010

Я заметил, что если у меня есть уникальные составные ключи для двух столбцов, column_a и column_b, то мой sql игнорирует это ограничение, если один столбец равен нулю.

например.

если column_a = 1 и column_b = null, я могу вставить column_a = 1 и column_b = null столько, сколько мне нравится

если column_a = 1 и column_b = 2, я могу вставить это значение только один раз.

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

1 Ответ

17 голосов
/ 21 июня 2010

http://dev.mysql.com/doc/refman/5.0/en/create-index.html

"УНИКАЛЬНЫЙ индекс создает ограничение, так что все значения в индексе должны различаться. Ошибка при попытке добавить новую строку со значением ключа, совпадающим с существующей строкой. Это ограничение не применяется к значениям NULL, за исключением механизма хранения BDB. Для других механизмов индекс UNIQUE допускает несколько значений NULL для столбцов, которые могут содержать NULL. "

Так что нет, вы не можете получитьMySQL для обработки NULL как уникального значения.Я полагаю, у вас есть несколько вариантов: вы можете сделать то, что предложили в своем вопросе, и сохранить «специальное значение» вместо нуля, или вы можете использовать механизм BDB для таблицы.Я не думаю, что это небольшое различие в поведении оправдывает необычный выбор механизма хранения.

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