Я вижу слишком часто "не нулевой первичный ключ" в сценариях, создающих таблицы в TSQL в блогах, статьях, книгах, форумах, здесь, в SO и т.д.
Например, BING дает 630 000 результатов ((только на английском языке), если для поиска по "не null" NEAR "первичный ключ" "sql-сервер":
http://www.bing.com/search?q=%22not+null%22+NEAR+%22primary+key%22+%22sql+server%22&go=&form=QBRE&filt=lf
Я всегда воспринимал "NOT NULL" как неотъемлемую часть определения PRIMARY KEY, по крайней мере, на SQL Server.
Я попытался создать таблицы с основными ключевыми словами с и без "NOT NULL" в SQL Server, но не смог понять возможную разницу.
Почему все используют "NOT NULL" для создания первичного ключа даже в быстрых (коротких) иллюстрациях?
Update:
Как NULL может идентифицировать что-либо или быть уникальным (а также предотвращать множественные NULL, если это разрешено)? Он не указан, отсутствует, не применимо значение
Мой вопрос также подразумевал подзапросы:
если для PK определить "NOT NULL" , почему тогда UNIQUE не указан?
И каково определение ПК. Это УНИКАЛЬНЫЙ КОНСТРАКЦИЯ + НЕ НУЛЬНЫЙ или УНИКАЛЬНЫЙ ИНДЕКС (тогда почему НЕ НУЛЛ)?
Plz дайте мне ссылку на msdn docs на нем.
Обновление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 Data Provider. Сообщение об ошибке: Невозможно вставить значение NULL в столбец "PK", таблицу "TestData.dbo.T3"; столбец не допускает нулей. INSERT не работает.
Оператор завершен.
Исправьте ошибки и повторите попытку или нажмите ESC, чтобы отменить изменения (изменения).
Справка OK
Update3:
Это определение понятий и терминов может показаться непрактичным досадой.
Это не так, некоторые неправильные утверждения (по мнению других (сторон) во время общения/обсуждения) по основному понятию достаточно, чтобы считаться идиотом и создавать барьеры в профессиональном взаимодействии и общении.
Я забыл сказать, что NULL написано SSMS для ПК!