Первичный ключ SQL
Я наткнулся на 2 версии кода sql..
--1
CREATE TABLE Location (
Id INTEGER PRIMARY KEY
NOT NULL,
Name TEXT NOT NULL
);
--2
CREATE TABLE Location (
Id INTEGER PRIMARY KEY
NOT NULL
UNIQUE,
Name TEXT NOT NULL
);
В SQL необходимо ли указывать первичный ключ, чтобы он был уникальным, а не нулевым?
Я всегда предполагал, что первичный ключ уникален и не может быть нулевым.
4 ответа:
Таблица может иметь не более одного первичного ключа, но более одного уникального ключа. Первичный ключ-это комбинация столбцов, которые однозначно определяют строку. Это особый случай уникальных ключей. Одно отличие состоит в том, что первичные ключи имеют неявное ограничение NOT NULL, а уникальные ключи-нет.
Указание "UNIQUE" в столбце первичного ключа является избыточным - поскольку первичный ключ уже гарантирует, что это будет так.
Ваш код является допустимым синтаксисом. Это создаст как
Есть законные основания для того, чтобы таблица имела более одного ключа, но не на одном наборе столбцов. Таблица может иметь только один ключ, помеченный как "основной". Каждая таблица требует по крайней мере одного ключа, но нет необходимости помечать ключ как "первичный", даже если таблица имеет только один ключ.PRIMARY KEY
, так иUNIQUE
ограничение, охватывающее один и тот же столбец.В SQL Server пометка как "основной" имеет последствия (например,
NOT NULL
, значение по умолчанию ключ при создании ссылки на внешний ключ и т. д.), Но я предпочитаю быть откровенным о таких вещах. Предположительно, намерение состоит в том, чтобы ваша таблица имела единственный ключ, поэтому я предлагаю вам опуститьPRIMARY KEY
. Я также рекомендую вам дать вашему ключуUNIQUE
явное имя, напримерCREATE TABLE Location ( Id INTEGER NOT NULL CONSTRAINT Location__key UNIQUE, Name TEXT NOT NULL );