Database
 sql >> Baza danych >  >> RDS >> Database

Różnica między kluczem podstawowym a kluczem unikalnym

„Jaka jest różnica między ograniczeniem klucza podstawowego a ograniczeniem klucza unikalnego?”

Jest to prawdopodobnie najczęściej zadawane pytanie podczas rozmowy kwalifikacyjnej dla programistów baz danych. W tym artykule postaramy się na nie odpowiedzieć.

Zacznijmy od przyjrzenia się podstawowym i unikalnym kluczom, a także ich podobieństwom.

Klucz główny

Klucz podstawowy służy do jednoznacznej identyfikacji każdego rekordu w tabeli. Każda tabela musi mieć co najmniej jeden klucz podstawowy. Aby zdefiniować klucz podstawowy na serwerze SQL, wystarczy użyć słów kluczowych „Klucz podstawowy” po nazwie kolumny.

Unikalny klucz

Kolumna z unikalnym ograniczeniem klucza może zawierać tylko unikalne wartości — jest to wynik unikatowego klucza uniemożliwiającego przechowywanie zduplikowanych wartości wewnątrz kolumny.

Aby zdefiniować unikalny klucz, musisz do nazwy pola dopisać „Unikalny”. Należy pamiętać, że posiadanie unikalnego klucza w tabeli nie jest obowiązkowe.

Przykład tworzenia kluczy podstawowych i unikalnych

Poniższy skrypt tworzy bazę danych „Test”, która zawiera jedną tabelę o nazwie „Samochody”.

Ta tabela będzie miała kolumnę klucza podstawowego o nazwie „ID” i kolumnę klucza unikatowego o nazwie „NumberPlate”.

CREATE DATABASE TEST
GO
USE TEST
GO


CREATE TABLE Cars (
    ID int PRIMARY KEY,
    Name varchar(255) NOT NULL,
    NumberPlate varchar(255) UNIQUE,
    Model int
);

Następnie dodajmy kilka fikcyjnych rekordów do naszej tabeli „Samochody”. Wykonaj następujący skrypt:

INSERT INTO Cars
VALUES 
(1, 'Toyota', 'ABC 123', 199),
(2, 'Toyota', 'ABC 345', 207),
(3, 'Toyota', 'ABC 758', 205),
(4, 'Toyota', 'ABC 741', 306),
(5, 'Toyota', 'ABC 356', 124)

Zanim porozmawiamy o różnicach, przyjrzyjmy się najpierw podobieństwom między kluczami podstawowymi i unikalnymi.

Podobieństwa między kluczem podstawowym i unikalnym

  1. Kolumny z kluczami podstawowymi lub unikalnymi nie mogą mieć zduplikowanych wartości.

Spróbujmy dodać nowy rekord o wartości identyfikatora 2 (który już istnieje) do tabeli „Samochody”. Wykonaj następujący skrypt:

INSERT INTO Cars
VALUES 
(2, 'Toyota', 'ABC 345', 356)

Po wykonaniu powyższego skryptu zostanie wyświetlony następujący błąd:

Błąd wyraźnie mówi, że ta instrukcja narusza ograniczenie klucza podstawowego i że zduplikowanych wartości nie można wstawić do kolumny klucza podstawowego.

Podobnie spróbujmy wstawić zduplikowaną wartość do kolumny „NumberPlate” z unikalnym ograniczeniem klucza, używając następującego zapytania:

INSERT INTO Cars
VALUES 
(6, 'Toyota', 'ABC 345', 356)

Tym razem zobaczysz, że doszło do naruszenia ograniczenia unikatowego klucza, ponieważ wartość „ABC 345” już istnieje w kolumnie „NumberPlate”, która ma ograniczenie unikatowego klucza. Komunikat o błędzie będzie wyglądał tak:

  1. Ponieważ zarówno klucz podstawowy, jak i kolumny unikatowe nie akceptują zduplikowanych wartości, mogą służyć do jednoznacznego identyfikowania rekordu w tabeli. Oznacza to, że dla każdej wartości w kolumnie klucza podstawowego lub unikalnego zostanie zwrócony tylko jeden rekord.

Różnice między kluczem podstawowym a unikalnym

Teraz, gdy rozumiemy podobieństwa między kluczami podstawowymi i unikalnymi, przyjrzyjmy się ich różnicom.

  1. Tabela może mieć tylko jeden klucz podstawowy, ale wiele unikalnych kluczy.

Poniższy przykład pomoże nam to lepiej zrozumieć.

W bazie danych „Test”, którą stworzyliśmy wcześniej, stwórzmy nową tabelę „Samochody2” z dwoma kluczami podstawowymi. Aby to zrobić, wykonaj następujący skrypt:

CREATE TABLE Cars2 (
    ID int PRIMARY KEY,
    Name varchar(255) NOT NULL,
    NumberPlate varchar(255) UNIQUE,
    Model int PRIMARY KEY
);

W powyższym skrypcie ustawiamy ograniczenia klucza podstawowego na kolumny ID i Model. Jednak ponieważ tylko jedna kolumna w tabeli może mieć ograniczenie klucza podstawowego, zobaczysz następujący błąd:

Ten komunikat o błędzie wyraźnie informuje nas, że tabela nie może mieć wielu ograniczeń dotyczących klucza podstawowego.

Teraz dodajmy wiele unikalnych kluczowych ograniczeń do tabeli „Samochody2”. Spójrz na następujący skrypt:

CREATE TABLE Cars2 (
    ID int PRIMARY KEY,
    Name varchar(255) NOT NULL,
    NumberPlate varchar(255) UNIQUE,
    Model int UNIQUE
);

Dzięki temu możemy dodać unikalne ograniczenia kluczowe w kolumnach „NumberPlate” i „Model”. Ponieważ tabela może mieć wiele kolumn z unikalnymi ograniczeniami klucza, nie zobaczysz żadnych komunikatów o błędach podczas wykonywania powyższego skryptu.

  1. Kolumna klucza podstawowego nie może mieć wartości null, podczas gdy kolumna klucza unikalnego może mieć jedną wartość null.

Zobaczmy to w akcji. Najpierw dodajmy rekord z wartością null do kolumny klucza podstawowego w tabeli „Samochody”. Spójrz na poniższy skrypt:

INSERT INTO Cars
VALUES 
( null, 'Toyota', 'ABC 345', 356)

Widać, że ten skrypt wstawia null jako wartość do kolumny ID. Po uruchomieniu powinieneś zobaczyć następujący błąd w oknie komunikatu wyjściowego:

Błąd informuje nas, że nie można wstawić wartości null, ponieważ kolumna klucza podstawowego nie zezwala na wartości null.

Spróbujmy teraz dodać wartości null do unikalnej kolumny klucza „NumberPlate”. Aby to zrobić, wykonaj następujący skrypt:

INSERT INTO Cars
VALUES 
( 6, 'Toyota',null, 356)

Spowoduje to dodanie nowego rekordu o wartości identyfikatora 6 i wartości null do tabeli „Samochody” – w szczególności wartość null jest przypisywana do kolumny „NumberPlate”. Zobaczysz, że powyższy skrypt zostanie wykonany bez błędów, ponieważ unikalna kolumna klucza może domyślnie akceptować wartości null.

Aby sprawdzić, czy wartość null została rzeczywiście wstawiona do kolumny „NumberPlate”, musimy wybrać wszystkie rekordy z tabeli „Cars” za pomocą następującego skryptu:

SELECT * FROM Cars


W powyższym zestawie wyników widać wyraźnie, że kolumna klucza podstawowego „ID” nie nie zawiera żadnych wartości null. Z drugiej strony kolumna „NumberPlate” z unikalnym ograniczeniem klucza zawiera wartość null, którą właśnie wstawiliśmy. Pamiętaj, że nie możesz dodać więcej niż jednej wartości null do unikalnej kolumny klucza, ponieważ druga wartość null będzie duplikatem pierwszej – a duplikaty nie są dozwolone.

  1. Domyślnie w kolumnie klucza podstawowego tworzony jest unikatowy indeks klastrowy; z drugiej strony unikalny indeks nieklastrowy jest tworzony w unikalnej kolumnie klucza.

Aby zobaczyć indeksy w tabeli „Samochody”, wykonaj następujący skrypt:

USE TEST
GO
sp_help Cars

W danych wyjściowych zobaczysz szczegóły tabeli „Samochody”, w tym indeksy, jak pokazano na poniższym rysunku:

Na powyższym rysunku widać, że kolumna „NumberPlate” ma unikalny indeks nieklastrowany, podczas gdy kolumna ID ma unikalny indeks klastrowy.

Wniosek

Pomimo kilku podstawowych podobieństw klucze podstawowe i unikalne różnią się znacznie. Możesz mieć tylko jeden klucz podstawowy na tabelę, ale wiele unikalnych kluczy. Podobnie kolumna klucza podstawowego nie akceptuje wartości null, podczas gdy kolumny klucza unikatowego mogą zawierać po jednej wartości null. I wreszcie, kolumna klucza podstawowego ma unikalny indeks klastrowy, podczas gdy kolumna unikatowego klucza ma unikalny indeks nieklastrowy.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dogłębna eksploracja zabezpieczeń na poziomie wiersza

  2. Typ danych SQL VARCHAR Zalecenia i zakazy dla szybszych baz danych

  3. Wszystko, co musisz wiedzieć o SQL CTE w jednym miejscu

  4. Agregaty i partycjonowanie

  5. Easysoft udostępnia most ODBC-ODBC dla systemu Windows 10