Różnice między „unikalnym kluczem” a „kluczem podstawowym”

Odpowiedzi:

20

Tabela może mieć maksymalnie jedno PRIMARY KEYograniczenie, ale może mieć tyle UNIQUE KEYograniczeń, ile chcesz .

Kolumny wchodzące w skład PRIMARY KEYmuszą być zdefiniowane jako NOT NULL. Nie jest to wymagane w przypadku kolumn, które są częścią UNIQUE KEYograniczeń. Jeśli kolumny nie są zerowalne, nie ma różnicy między kluczami unikalnymi i podstawowymi.

Kolejną niewielką różnicą jest to, że możesz wybrać nazwę UNIQUE KEYograniczenia (i indeksu). Z drugiej strony, PRIMARY KEYma domyślną nazwę: PRIMARY.

ypercubeᵀᴹ
źródło
5

Jedna główna różnica

  • Klucz podstawowy nie zezwala na kolumny zerowalne
  • Unikalny klucz pozwala na zerowanie kolumn

W przeciwnym razie nie ma dużej różnicy ...

gbn
źródło
4

Coś, czego inni nie zauważyli:

  • Jeśli nie zadeklarujesz jawnie PK w tabelach InnoDB, stworzy to dla Ciebie pod przykryciem. Nie można uzyskać dostępu, uporządkować ani filtrować według tego klucza niejawnego. Ma to konsekwencje pod względem zasobów, ponieważ każdy indeks wtórny zawiera wskaźnik kopiowania do PK wiersza.
atxdba
źródło
3

Najważniejsza różnica polega na ich przeznaczeniu .

  • Klucz podstawowy : Celem klucza podstawowego jest działanie jako „KLUCZ”. Klucz podstawowy to klucz w relacyjnej bazie danych służący do identyfikacji rekordów.
  • Unikalny indeks : Unikalny indeks to „INDEKS” przeznaczony do działania. Optymalizator wie, że dla warunku „gdzie x =: x” będzie tylko jeden rekord - dzięki temu może przygotować odpowiedni plan.
  • Unikalne ograniczenie : jest to „OGRANICZENIE”, które gwarantuje, że w tej kolumnie nie ma zduplikowanych wartości. Jest to ograniczenie integralności danych.

Na uwagę zasługują następujące cele.

  • O ile nie określono inaczej, KLUCZ PODSTAWOWY spróbuje utworzyć INDEKS Klastra (ten punkt dotyczy SQL Servera, jak wspomniano w komentarzu)
  • W tabeli może być tylko jeden KLUCZ PODSTAWOWY; ale może istnieć wiele unikalnych ograniczeń i unikalnych indeksów
  • KLUCZ PODSTAWOWY zawsze nie jest pusty, ale kolumny z unikalnym ograniczeniem mogą zawierać wartości NULL
LCJ
źródło
1
Pytanie jest oznaczone MySQL. Nie można określić inaczej, jeśli tabela korzysta z silnika InnoDB i ma klucz podstawowy, jest to indeks klastrowany. Bez wyboru. Być może myślałeś o SQL Server.
ypercubeᵀᴹ