Я слишком часто вижу «не нулевой первичный ключ» в сценариях, создающих таблицы в TSQL в блогах, статьях, книгах, форумах, здесь, в SO и т. Д.
Например, BING дает 630 000 результатов ((только на английском языке), если искать по «не нулевому» NEAR «первичный ключ» «sql server»:
http://www.bing.com/search?q=%22not+null%22+NEAR+%22primary+key%22+%22sql+server%22&go=&
Я попытался создать таблицы с первичными ключами с «NOT NULL» и без него в SQL Server, но не смог уловить возможную разницу.
Почему все используют «NOT NULL» для создания первичного ключа даже в быстрых (коротких) иллюстрациях?
Обновление:
Как NULL может идентифицировать что-либо или быть уникальным (а также предотвращать множественные NULL, если один разрешен)? Не указано, отсутствует, неприменимое значение
В моем вопросе также есть подвопросы:
если для PK определено "NOT NULL", почему тогда UNIQUE не указан?
А каково определение PK. Это УНИКАЛЬНОЕ ОГРАНИЧЕНИЕ + НЕ НУЛЬ или УНИКАЛЬНЫЙ ИНДЕКС (тогда почему НЕ НУЛЬ)?
Пожалуйста, дайте мне ссылку на документы msdn.
Обновление 2: @Damien_The_Unbeliever
Почему нет синонима без «NOT NULL»?
CREATE TABLE T3
(
PK int -- NOT NULL commented out
, nonPK int -- to double-check my sanity
, constraint PK_vgv8 PRIMARY KEY (PK) on [PRIMARY]
)
по-прежнему не разрешает выдачу NULL:
Microsoft SQL Server Management Studio
Ни одна строка не обновлялась.
Данные в строке 2 не были зафиксированы. Источник ошибки: поставщик данных .Net SqlClient. Сообщение об ошибке: не удается вставить значение NULL в столбец «PK», таблица «TestData.dbo.T3»; столбец не допускает значений NULL. Ошибка INSERT.
Оператор прерван.
Исправьте ошибки и повторите попытку или нажмите ESC, чтобы отменить изменение (я).
OK Help
Update3:
Это определение понятий и терминов может показаться непрактичным неудобством.
Это не так, какого-то неправильного утверждения (по мнению других во время общения / обсуждения) по основному понятию достаточно, чтобы считаться дебилом и создавать барьеры в профессиональном взаимодействии и общении.
Я забыл сказать, что NOT NULL создается SSMS для PK!