MySQL Integer столбец, уникальные значения, но возможность по умолчанию? - PullRequest
2 голосов
/ 21 июня 2011

Мне нужна таблица с целочисленным столбцом, которая может быть заполнена или не заполнена (это номер социального страхования). Но если он заполнен, я хочу, чтобы он был УНИКАЛЬНЫМ: не может быть двух записей с одинаковым номером.

Использование уникального ограничения не будет работать, поскольку целое число не будет принимать значения NULL, а MySQL обнаруживает несколько значений 0.

Как я могу установить уникальное ограничение для целого числа со значением по умолчанию? Или как я могу установить целочисленный столбец, чтобы принимать значения NULL? (этот вопрос воспринимается как должное: Ограничение внешнего ключа MySQL - столбец целых чисел , но я не могу)

Ответы [ 2 ]

2 голосов
/ 21 июня 2011
create table test (
    myint INT NULL, UNIQUE INDEX (myint)
);

Это позволит использовать уникальное ограничение для любых добавленных целых чисел, но позволит ввести несколько значений NULL.

MySQL рассматривает NULL как «неизвестное» значение, поэтому, возможно, не может выполнить сравнение, чтобы увидеть, существует ли подобное значение «неизвестно»! == «неизвестно».

Это также зависит от того, какой движок базы данных вы используете, приведенное выше справедливо для MyISAM и InnoDB

1 голос
/ 13 января 2012

Пожалуйста, смотрите код ниже:

ALTER TABLE test MODIFY myint INT NULL
ALTER TABLE test ADD UNIQUE INDEX (myint)

Это работает, когда входные данные поступают напрямую из MySQL (PHPMyadmin), сохраняются как NULL, но скрипт php сохраняет их как нули, и поэтому он не допускает множественные записи.

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