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

Jak vytvořit tabulku s cizím klíčem v SQL

Problém:

Chcete vytvořit cizí klíč pro tabulku v databázi.

Příklad:

Rádi bychom vytvořili tabulku s názvem student který obsahuje cizí klíč, který odkazuje na id sloupec v tabulce city .

Řešení 1 (nová tabulka):

CREATE TABLE student (
id INT PRIMARY KEY,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
city_id INT FOREIGN KEY REFERENCES city(id)
);

Diskuse:

Chcete-li vytvořit novou tabulku obsahující sloupec cizího klíče, který odkazuje na jinou tabulku, použijte klíčové slovo FOREIGN KEY REFERENCES na konci definice tohoto sloupce. Za tím uveďte název odkazované tabulky a název odkazovaného sloupce v závorkách.

V našem příkladu vytvoříme tabulku student pomocí CREATE TABLE doložka. Vypíšeme názvy sloupců a jejich příslušné datové typy vložíme do závorek. Sloupec city_id je cizí klíč v této tabulce a označuje hodnotu ID uloženého ve sloupci id v tabulce city . Píšeme FOREIGN KEY REFERENCES na konci definice tohoto sloupce a za ním s odkazovanou tabulkou a sloupcem:city(id) .

Mějte na paměti, že pro tabulku můžete vytvořit více než jeden cizí klíč.

Řešení 2 (nová tabulka):

CREATE TABLE student (
id INT PRIMARY KEY,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
city_id INT,
FOREIGN KEY (city_id) REFERENCES city(id)
);

Diskuse:

Dalším způsobem, jak definovat cizí klíč během vytváření tabulky, je použít FOREIGN KEY REFERENCES klauzule na konci definic sloupců. V tomto případě za FOREIGN KEY klauzule označujeme sloupec cizího klíče. Následuje REFERENCES klauzule spolu s názvem odkazované tabulky a sloupce.

Cizí klíče můžete vytvořit ve více než jednom sloupci, jak je znázorněno níže:

Řešení 3 (nová tabulka):

CREATE TABLE student (
id INT PRIMARY KEY,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
score_id INT,
subject_id INT,
      CONSTRAINT fk_student_score_subject_id 
      FOREIGN KEY (subject_id, score_id) REFERENCES score_subject(subject_id, score_id)
);

V tomto příkladu omezení fk_student_score_subject_id je cizí klíč sestávající ze dvou sloupců:score_id a subject_id . Tyto dva sloupce cizího klíče odkazují na dva sloupce v tabulce score_subjectscore_id a subject_id .

Zde je další příklad:

Řešení 4 (nová tabulka):

CREATE TABLE student (
id INT PRIMARY KEY,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
city_id INT,
      CONSTRAINT fk_student_city_id 
      FOREIGN KEY (city_id) REFERENCES city(id)
);

Diskuse:

V tomto kódu máme opět CONSTRAINT klauzule s názvem tohoto omezení. Používejte jména, která jsou snadno čitelná a srozumitelná. V našem příkladu používáme název fk_student_city_id , který označuje příslušnou tabulku a sloupec. Dále napíšeme FOREIGN KEY a přidejte (v závorkách) název sloupce, který se stane cizím klíčem. Pak máme REFERENCES klauzule následovaná názvem odkazované tabulky a sloupce (zde:id ).

Řešení 5 (stávající tabulka):

ALTER TABLE student
ADD FOREIGN KEY (city_id) REFERENCES city(id);

Diskuse:

Je také možné přidat nový cizí klíč do existující tabulky. Zde je tabulka změněna pomocí ALTER TABLE doložka. Název tabulky (v našem příkladu student ) je umístěn za ALTER TABLE klíčové slovo. Dále ADD FOREIGN KEY klauzule je následována názvem sloupce, který bude použit jako cizí klíč. Pak máme REFERENCES clause s názvem odkazované tabulky a názvem sloupce primárního klíče v závorkách.

Pamatujte, že tabulka, kterou upravujete, musí před provedením tohoto příkazu existovat.

Řešení 6 (stávající tabulka, omezení cizího klíče):

ALTER TABLE student
      ADD CONSTRAINT fk_student_city_id 
      FOREIGN KEY (city_id) REFERENCES city(id)

Diskuse:

Tento dotaz použijte, pokud chcete pojmenovat sloupec cizího klíče jako omezení pro existující tabulku. Zde se omezení cizího klíče jmenuje fk_student_city_id . Pokud nezadáte název omezení, databáze vygeneruje výchozí název omezení (který se bude lišit podle databáze).


  1. SQL:Aktualizace řádku a vrácení hodnoty sloupce pomocí 1 dotazu

  2. SQL dotaz k nalezení chybějících řádků mezi dvěma souvisejícími tabulkami

  3. Vytvořte tabulku Excelu z databáze Oracle

  4. SQL OUTPUT Uložené procedury nefungují s ExecuteReader