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

Come creare una tabella con una chiave esterna in SQL

Problema:

Vuoi creare una chiave esterna per una tabella in un database.

Esempio:

Vorremmo creare una tabella denominata student che contiene una chiave esterna che fa riferimento all'id colonna nella tabella city .

Soluzione 1 (nuova tabella):

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

Discussione:

Per creare una nuova tabella contenente una colonna di chiave esterna che fa riferimento a un'altra tabella, utilizzare la parola chiave FOREIGN KEY REFERENCES alla fine della definizione di tale colonna. Seguilo con il nome della tabella di riferimento e il nome della colonna di riferimento tra parentesi.

Nel nostro esempio creiamo la tabella student utilizzando un CREATE TABLE clausola. Elenchiamo i nomi delle colonne e mettiamo tra parentesi i rispettivi tipi di dati. La colonna city_id è la chiave esterna in questa tabella e indica il valore dell'ID memorizzato nella colonna id nella tabella city . Scriviamo FOREIGN KEY REFERENCES alla fine della definizione di questa colonna e seguirla con la tabella e la colonna di riferimento:city(id) .

Tieni presente che puoi creare più di una chiave esterna per una tabella.

Soluzione 2 (nuova tabella):

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

Discussione:

Un altro modo per definire una chiave esterna durante la creazione della tabella consiste nell'utilizzare FOREIGN KEY REFERENCES clausola alla fine delle definizioni di colonna. In questo caso, dopo la FOREIGN KEY clausola, designiamo la colonna della chiave esterna. Poi arriva il REFERENCES clausola insieme al nome della tabella e della colonna a cui si fa riferimento.

Puoi creare chiavi esterne su più di una colonna, come mostrato di seguito:

Soluzione 3 (nuova tabella):

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 questo esempio, il vincolo fk_student_score_subject_id è una chiave esterna composta da due colonne:score_id e subject_id . Queste due colonne di chiave esterna fanno riferimento a due colonne nella tabella score_subjectscore_id e subject_id .

Ecco un altro esempio:

Soluzione 4 (nuova tabella):

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

Discussione:

In questo codice abbiamo di nuovo il CONSTRAINT clausola con il nome di questo vincolo. Usa nomi di facile lettura e comprensione. Nel nostro esempio, utilizziamo il nome fk_student_city_id , che indica la tabella e la colonna pertinenti. Successivamente, scriviamo FOREIGN KEY e aggiungi (tra parentesi) il nome della colonna che diventa la chiave esterna. Poi abbiamo i REFERENCES clausola seguita dal nome della tabella e della colonna di riferimento (qui:id ).

Soluzione 5 (tabella esistente):

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

Discussione:

È anche possibile aggiungere una nuova chiave esterna a una tabella esistente. Qui, la tabella viene modificata utilizzando un ALTER TABLE clausola. Il nome del tavolo (nel nostro esempio, student ) viene posizionato dopo il ALTER TABLE parola chiave. Successivamente, il ADD FOREIGN KEY La clausola è seguita dal nome della colonna che verrà utilizzata come chiave esterna. Poi abbiamo la REFERENCES clause con il nome della tabella di riferimento e il nome della colonna della chiave primaria tra parentesi.

Nota che la tabella che stai modificando deve esistere prima che questo comando venga eseguito.

Soluzione 6 (tabella esistente, vincolo di chiave esterna):

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

Discussione:

Utilizzare una query come questa se si desidera nominare una colonna di chiave esterna come vincolo per una tabella esistente. Qui, il vincolo di chiave esterna è denominato fk_student_city_id . Se non specifichi il nome del vincolo, il database genera un nome del vincolo predefinito (che varia in base al database).