Database
 sql >> Datenbank >  >> RDS >> Database

So erstellen Sie eine Tabelle mit einem Fremdschlüssel in SQL

Problem:

Sie möchten einen Fremdschlüssel für eine Tabelle in einer Datenbank erstellen.

Beispiel:

Wir möchten eine Tabelle mit dem Namen student die einen Fremdschlüssel enthält, der auf die id verweist Spalte in der Tabelle city .

Lösung 1 (neue Tabelle):

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

Diskussion:

Um eine neue Tabelle zu erstellen, die eine Fremdschlüsselspalte enthält, die auf eine andere Tabelle verweist, verwenden Sie das Schlüsselwort FOREIGN KEY REFERENCES am Ende der Definition dieser Spalte. Darauf folgen der Name der referenzierten Tabelle und der Name der referenzierten Spalte in Klammern.

In unserem Beispiel erstellen wir die Tabelle student mit einem CREATE TABLE Klausel. Wir listen die Namen der Spalten auf und setzen ihre jeweiligen Datentypen in Klammern. Die Spalte city_id ist der Fremdschlüssel in dieser Tabelle und gibt den Wert der ID an, die in der Spalte id gespeichert ist in der Tabelle city . Wir schreiben FOREIGN KEY REFERENCES am Ende der Definition dieser Spalte und folgen Sie ihr mit der referenzierten Tabelle und Spalte:city(id) .

Denken Sie daran, dass Sie mehr als einen Fremdschlüssel für eine Tabelle erstellen können.

Lösung 2 (neue Tabelle):

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

Diskussion:

Eine andere Möglichkeit, einen Fremdschlüssel während der Tabellenerstellung zu definieren, ist die Verwendung der FOREIGN KEY REFERENCES -Klausel am Ende der Spaltendefinitionen. In diesem Fall nach dem FOREIGN KEY -Klausel bezeichnen wir die Fremdschlüsselspalte. Als nächstes kommen die REFERENCES -Klausel zusammen mit dem Namen der referenzierten Tabelle und Spalte.

Sie können Fremdschlüssel für mehr als eine Spalte erstellen, wie unten gezeigt:

Lösung 3 (neue Tabelle):

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

In diesem Beispiel die Einschränkung fk_student_score_subject_id ist ein Fremdschlüssel, der aus zwei Spalten besteht:score_id und subject_id . Diese beiden Fremdschlüsselspalten beziehen sich auf zwei Spalten in der Tabelle score_subjectscore_id und subject_id .

Hier ist ein weiteres Beispiel:

Lösung 4 (neue Tabelle):

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

Diskussion:

In diesem Code haben wir wieder die CONSTRAINT -Klausel mit dem Namen dieser Einschränkung. Verwenden Sie Namen, die leicht zu lesen und zu verstehen sind. In unserem Beispiel verwenden wir den Namen fk_student_city_id , das die relevante Tabelle und Spalte angibt. Als nächstes schreiben wir FOREIGN KEY und fügen Sie (in Klammern) den Namen der Spalte hinzu, die zum Fremdschlüssel wird. Dann haben wir die REFERENCES -Klausel gefolgt vom Namen der referenzierten Tabelle und Spalte (hier:id ).

Lösung 5 (vorhandene Tabelle):

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

Diskussion:

Es ist auch möglich, einer bestehenden Tabelle einen neuen Fremdschlüssel hinzuzufügen. Hier wird die Tabelle mit einem ALTER TABLE verändert Klausel. Der Tabellenname (in unserem Beispiel student ) wird nach ALTER TABLE platziert Stichwort. Als nächstes der ADD FOREIGN KEY -Klausel folgt der Name der Spalte, die als Fremdschlüssel verwendet wird. Dann haben wir die REFERENCES clause mit dem Namen der referenzierten Tabelle und dem Namen der Primärschlüsselspalte in Klammern.

Beachten Sie, dass die Tabelle, die Sie ändern, vorhanden sein muss, bevor dieser Befehl ausgeführt wird.

Lösung 6 (vorhandene Tabelle, Fremdschlüsselbeschränkung):

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

Diskussion:

Verwenden Sie eine Abfrage wie diese, wenn Sie eine Fremdschlüsselspalte als Einschränkung für eine vorhandene Tabelle benennen möchten. Hier heißt die Fremdschlüsseleinschränkung fk_student_city_id . Wenn Sie den Constraint-Namen nicht angeben, generiert die Datenbank einen Standard-Constraint-Namen (der je nach Datenbank unterschiedlich ist).