Первичный ключ 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 2

4 ответа:

Таблица может иметь не более одного первичного ключа, но более одного уникального ключа. Первичный ключ-это комбинация столбцов, которые однозначно определяют строку. Это особый случай уникальных ключей. Одно отличие состоит в том, что первичные ключи имеют неявное ограничение NOT NULL, а уникальные ключи-нет.

Указание "UNIQUE" в столбце первичного ключа является избыточным - поскольку первичный ключ уже гарантирует, что это будет так.

И UNIQUE, и NOT NULL не нужны, поскольку первичный ключ подразумевает и то, и другое.

Ваш код является допустимым синтаксисом. Это создаст как 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 
);