SQL первичный ключ может принимать «0»? - PullRequest
10 голосов
/ 25 марта 2011

SQL Server 2008/2005

Я запутался между Первичным и Уникальным Ключом.

Мне известно, что Первичный ключ не разрешит NULL, а Unique примет NULL. Кроме того, таблица может содержать n уникальных ключей.!

Разрешит ли первичный ключ ноль?

Ответы [ 4 ]

14 голосов
/ 25 марта 2011

Первичный ключ может быть нулевым, но если вы установите Identity для столбца, он обычно будет начинаться с 1, а не с нуля.

7 голосов
/ 25 марта 2011

Первичный ключ может разрешать 0 в зависимости от типа данных Первичного ключа. Автоматически сгенерированный PK (Identity) может начинаться с 0, но это не стандартное поведение, вам придется настроить его на начало с 0 (черт возьми, вы можете начать с отрицательных чисел, если хотите). Для достижения наилучших результатов это следует сделать до того, как вы начнете вводить данные в таблицу.

То, что вы не можете сделать, - это иметь несколько записей с 0 в качестве PK, поскольку это нарушает требование уникальности PK.

Если у вас есть существующие данные и вы хотите, чтобы запись имела нулевое значение для определенной цели (например, мы добавили пользователя для нашего процесса импорта, чтобы в поле insertby могло отображаться, что запись поступила из импорта), то, что вам, вероятно, нужно, это разрешить ручную вставку в поле идентификатора, чтобы вы могли ввести эту конкретную запись в нужное вам значение, а затем вернуться к обычным настройкам. Это делается так:

set Identity_insert dbo.table1 ON
insert dbo.table1 (id, myfield)
Values (0, 'test')
set Identity_insert dbo.table1 OFF

Не делайте этого в производственном коде приложения, это задача системного администратора, которую следует выполнять только изредка для установки определенной записи вне области обычных данных или для вставки записей, переносимых из другого источника ( когда вы знаете, что их существующие значения идентификаторов в настоящее время не используются). Это не должно легко использоваться, чтобы обойти ограничения поля идентичности. В частности, его никогда не следует использовать для заполнения записей, в которых пропущена идентификация (из-за удаления или отката), поскольку это противоречит цели использования идентификатора и может вызвать проблемы с целостностью данных, если не установлены надлежащие отношения PK / FK.

3 голосов
/ 25 марта 2011

Да.NULL - это отсутствие значения.0 является значением.

0 голосов
/ 18 марта 2019

Да, вы можете определить столбец со значением по умолчанию 0 в качестве внешнего ключа.Однако, чтобы ограничение работало, вам также необходимо иметь строку в исходной таблице со значением 0.... Вы можете вставить первичную запись идентификатора 0 в основную таблицу.

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