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

Jak utworzyć tabelę z kluczem obcym w SQL?

Problem:

Chcesz utworzyć klucz obcy dla tabeli w bazie danych.

Przykład:

Chcielibyśmy utworzyć tabelę o nazwie student który zawiera klucz obcy, który odwołuje się do id kolumna w tabeli city .

Rozwiązanie 1 (nowa tabela):

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)
);

Dyskusja:

Aby utworzyć nową tabelę zawierającą kolumnę klucza obcego, która odwołuje się do innej tabeli, użyj słowa kluczowego FOREIGN KEY REFERENCES na końcu definicji tej kolumny. Postępuj zgodnie z nazwą tabeli, do której się odwołuje, i nazwą kolumny, do której się odwołuje, w nawiasach.

W naszym przykładzie tworzymy tabelę student za pomocą CREATE TABLE klauzula. Podajemy nazwy kolumn i umieszczamy odpowiadające im typy danych w nawiasach. Kolumna city_id jest kluczem obcym w tej tabeli i wskazuje wartość identyfikatora przechowywanego w kolumnie id w tabeli city . Piszemy FOREIGN KEY REFERENCES na końcu definicji tej kolumny i po niej z odnośną tabelą i kolumną:city(id) .

Pamiętaj, że możesz utworzyć więcej niż jeden klucz obcy dla tabeli.

Rozwiązanie 2 (nowa tabela):

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)
);

Dyskusja:

Innym sposobem zdefiniowania klucza obcego podczas tworzenia tabeli jest użycie FOREIGN KEY REFERENCES klauzula na końcu definicji kolumn. W tym przypadku po FOREIGN KEY klauzuli, wyznaczamy kolumnę klucza obcego. Następnie pojawia się REFERENCES clause klauzula wraz z nazwą odnośnej tabeli i kolumny.

Możesz tworzyć klucze obce w więcej niż jednej kolumnie, jak pokazano poniżej:

Rozwiązanie 3 (nowa tabela):

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)
);

W tym przykładzie ograniczenie fk_student_score_subject_id to klucz obcy składający się z dwóch kolumn:score_id i subject_id . Te dwie kolumny klucza obcego odnoszą się do dwóch kolumn w tabeli score_subjectscore_id i subject_id .

Oto kolejny przykład:

Rozwiązanie 4 (nowa tabela):

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)
);

Dyskusja:

W tym kodzie ponownie mamy CONSTRAINT klauzula z nazwą tego ograniczenia. Używaj nazw, które są łatwe do odczytania i zrozumienia. W naszym przykładzie używamy nazwy fk_student_city_id , który wskazuje odpowiednią tabelę i kolumnę. Następnie piszemy FOREIGN KEY i dodaj (w nawiasach) nazwę kolumny, która stanie się kluczem obcym. Następnie mamy REFERENCES clause klauzula, po której następuje nazwa tabeli i kolumny, do której się odwołuje (tutaj:id ).

Rozwiązanie 5 (istniejąca tabela):

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

Dyskusja:

Możliwe jest również dodanie nowego klucza obcego do istniejącej tabeli. Tutaj tabela jest zmieniana za pomocą ALTER TABLE klauzula. Nazwa tabeli (w naszym przykładzie student ) jest umieszczana po ALTER TABLE słowo kluczowe. Następnie ADD FOREIGN KEY po klauzuli następuje nazwa kolumny, która będzie używana jako klucz obcy. Następnie mamy klauzulę REFERENCES clause z nazwą tabeli, do której się odwołuje, i nazwą kolumny klucza podstawowego w nawiasach.

Pamiętaj, że modyfikowana tabela musi istnieć przed wykonaniem tego polecenia.

Rozwiązanie 6 (istniejąca tabela, ograniczenie klucza obcego):

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

Dyskusja:

Użyj takiego zapytania, jeśli chcesz nazwać kolumnę klucza obcego jako ograniczenie dla istniejącej tabeli. Tutaj ograniczenie klucza obcego nazywa się fk_student_city_id . Jeśli nie określisz nazwy ograniczenia, baza danych wygeneruje domyślną nazwę ograniczenia (która będzie się różnić w zależności od bazy danych).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak stworzyć klaster Amazon Aurora?

  2. Współpraca z JDBC i Spring

  3. Gdy RÓŻNE <> GRUPUJ WG

  4. Co to jest indeks w SQL?

  5. RowGen v3 automatyzuje generowanie danych testowych bazy danych