sql >> Databáze >  >> RDS >> Database

Rozdíl mezi primárním klíčem a jedinečným klíčem

"Jaký je rozdíl mezi omezením primárního klíče a omezením jedinečného klíče?"

Toto je pravděpodobně nejčastější otázka pro vývojáře databází při pracovním pohovoru. V tomto článku se na to pokusíme odpovědět.

Začněme tím, že se podíváme na to, jaké jsou primární a jedinečné klíče, a také na jejich podobnosti.

Primární klíč

Primární klíč se používá k jednoznačné identifikaci každého záznamu v tabulce. Každá tabulka musí mít alespoň jeden primární klíč. Chcete-li definovat primární klíč na serveru SQL, budete jednoduše muset použít klíčová slova ‚Primární klíč‘ za názvem sloupce.

Jedinečný klíč

Sloupec s omezením jedinečného klíče může obsahovat pouze jedinečné hodnoty – to je výsledek jedinečného klíče, který zakazuje ukládat do sloupce duplicitní hodnoty.

Chcete-li definovat jedinečný klíč, musíte k názvu pole připojit „Unikátní“. Mějte prosím na paměti, že není povinné mít v tabulce jedinečný klíč.

Příklad vytvoření primárního a jedinečného klíče

Následující skript vytvoří databázi ‚Test‘, která obsahuje jednu tabulku nazvanou ‚Cars‘.

Tato tabulka bude mít sloupec primárního klíče s názvem „ID“ a sloupec jedinečného klíče s názvem „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
);

Dále přidáme několik fiktivních záznamů do naší tabulky „Auta“. Spusťte následující skript:

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)

Než budeme mluvit o rozdílech, podívejme se nejprve na podobnosti mezi primárním a jedinečným klíčem.

Podobnosti mezi primárním a jedinečným klíčem

  1. Sloupce s primárním nebo jedinečným klíčem nemohou mít duplicitní hodnoty.

Zkusme přidat nový záznam s hodnotou ID 2 (který již existuje) do tabulky ‚Auta‘. Spusťte následující skript:

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

Když spustíte skript výše, zobrazí se následující chyba:

Chyba jasně říká, že tento příkaz porušuje omezení primárního klíče a že do sloupce primárního klíče nelze vložit duplicitní hodnoty.

Podobně se pokusme vložit duplicitní hodnotu do sloupce ‚NumberPlate‘ s jedinečným omezením klíče pomocí následujícího dotazu:

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

Tentokrát uvidíte, že došlo k porušení omezení jedinečného klíče, protože hodnota ‚ABC 345‘ již existuje ve sloupci ‚NumberPlate‘, který má omezení jedinečného klíče. Chybová zpráva bude vypadat takto:

  1. Jelikož primární klíč ani jedinečné sloupce nepřijímají duplicitní hodnoty, lze je použít k jednoznačné identifikaci záznamu v tabulce. To znamená, že pro každou hodnotu ve sloupci primárního nebo jedinečného klíče bude vrácen pouze jeden záznam.

Rozdíly mezi primárním a jedinečným klíčem

Nyní, když rozumíme podobnostem mezi primárními a jedinečnými klíči, pojďme se podívat na jejich rozdíly.

  1. Tabulka může mít pouze jeden primární klíč, ale několik jedinečných klíčů.

Následující příklad nám to pomůže lépe pochopit.

Uvnitř databáze ‚Test‘, kterou jsme vytvořili dříve, vytvořte novou tabulku ‚Cars2‘ se dvěma primárními klíči. Chcete-li to provést, spusťte následující skript:

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

Ve výše uvedeném skriptu jsme nastavili omezení primárního klíče pro sloupce ID a Model. Protože však pouze jeden sloupec v tabulce může mít omezení primárního klíče, zobrazí se následující chyba:

Tato chybová zpráva nás jasně informuje, že tabulka nemůže mít více omezení primárního klíče.

Nyní do tabulky „Cars2“ přidejte několik jedinečných klíčových omezení. Podívejte se na následující skript:

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

To nám umožňuje přidat jedinečná klíčová omezení do sloupců ‚NumberPlate‘ a ‚Model‘. Vzhledem k tomu, že tabulka může mít více sloupců s jedinečnými omezeními klíče, neuvidíte při provádění výše uvedeného skriptu žádné chybové zprávy.

  1. Sloupec primárního klíče nemůže mít hodnoty null, zatímco sloupec Jedinečný klíč může mít jednu hodnotu null.

Podívejme se na to v akci. Nejprve přidejte záznam s nulovou hodnotou do sloupce primárního klíče v tabulce „Auta“. Podívejte se na skript níže:

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

Můžete vidět, že tento skript vloží null jako hodnotu do sloupce ID. Když jej spustíte, měli byste v okně výstupní zprávy vidět následující chybu:

Chyba nám říká, že nelze vložit hodnotu null, protože sloupec primárního klíče nepovoluje hodnoty null.

Zkusme nyní přidat hodnoty null do sloupce jedinečného klíče ‚NumberPlate‘. Chcete-li to provést, spusťte následující skript:

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

Tím se do tabulky ‚Cars‘ přidá nový záznam s hodnotou ID 6 a hodnotou null – konkrétně je hodnota null přiřazena ke sloupci ‚NumberPlate‘. Uvidíte, že výše uvedený skript bude proveden bez chyb, protože sloupec jedinečného klíče může ve výchozím nastavení přijímat hodnoty null.

Abychom ověřili, zda byla nulová hodnota skutečně vložena do sloupce ‚Číselný štítek‘, budeme muset vybrat všechny záznamy z tabulky ‚Auta‘ pomocí následujícího skriptu:

SELECT * FROM Cars


Ve výsledné sadě výše jasně vidíme, že sloupec primárního klíče 'ID' neobsahují žádné hodnoty null. Na druhou stranu sloupec ‚NumberPlate‘ s jedinečným omezením klíče obsahuje hodnotu null, kterou jsme právě vložili. Pamatujte, že do sloupce jedinečného klíče nemůžete přidat více než jednu hodnotu null, protože druhá hodnota null bude duplikátem první – a duplikáty nejsou povoleny.

  1. Ve výchozím nastavení je ve sloupci primárního klíče vytvořen jedinečný seskupený index; na druhé straně je ve sloupci jedinečného klíče vytvořen jedinečný index bez klastrů.

Chcete-li zobrazit indexy v tabulce „Auta“, spusťte následující skript:

USE TEST
GO
sp_help Cars

Ve výstupu uvidíte podrobnosti o tabulce „Auta“ včetně indexů, jak je znázorněno na obrázku níže:

Z výše uvedeného obrázku můžete vidět, že sloupec ‚NumberPlate‘ má neseskupený jedinečný index, zatímco sloupec ID má seskupený jedinečný index.

Závěr

Navzdory několika základním podobnostem mají primární a jedinečné klíče významné rozdíly. V každé tabulce můžete mít pouze jeden primární klíč, ale více jedinečných klíčů. Podobně sloupec primárního klíče nepřijímá hodnoty null, zatímco sloupce jedinečného klíče mohou obsahovat každý jednu hodnotu null. A konečně, sloupec primárního klíče má jedinečný seskupený index, zatímco sloupec jedinečného klíče má jedinečný neseskupený index.


  1. Jak zkontrolovat, zda soubor existuje v PL/SQL?

  2. Přidejte počáteční a koncové nuly na SQL Server

  3. Jak opravit „Příkaz ALTER TABLE SWITCH se nezdařil“ Msg 4982 (SQL Server)

  4. Průnik více polí v PostgreSQL