sql >> Database >  >> RDS >> Database

Een tabel maken met een externe sleutel in SQL

Probleem:

U wilt een externe sleutel maken voor een tabel in een database.

Voorbeeld:

We willen graag een tabel maken met de naam student die een externe sleutel bevat die verwijst naar de id kolom in de tabel city .

Oplossing 1 (nieuwe tabel):

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

Discussie:

Om een ​​nieuwe tabel te maken met een refererende-sleutelkolom die verwijst naar een andere tabel, gebruikt u het trefwoord FOREIGN KEY REFERENCES aan het einde van de definitie van die kolom. Volg dat met de naam van de tabel waarnaar wordt verwezen en de naam van de kolom waarnaar wordt verwezen tussen haakjes.

In ons voorbeeld maken we de tabel student met behulp van een CREATE TABLE clausule. We vermelden de namen van de kolommen en plaatsen hun respectieve gegevenstypen tussen haakjes. De kolom city_id is de refererende sleutel in deze tabel en geeft de waarde aan van de ID die is opgeslagen in de kolom id in de tabel city . We schrijven FOREIGN KEY REFERENCES aan het einde van de definitie van deze kolom en volg deze met de tabel en kolom waarnaar wordt verwezen:city(id) .

Houd er rekening mee dat u meer dan één externe sleutel voor een tabel kunt maken.

Oplossing 2 (nieuwe tabel):

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

Discussie:

Een andere manier om een ​​externe sleutel te definiëren tijdens het maken van een tabel, is door de FOREIGN KEY REFERENCES te gebruiken. clausule aan het einde van de kolomdefinities. In dit geval, na de FOREIGN KEY clausule, duiden we de kolom met een vreemde sleutel aan. Vervolgens komen de REFERENCES clausule samen met de naam van de tabel en kolom waarnaar wordt verwezen.

U kunt externe sleutels voor meer dan één kolom maken, zoals hieronder weergegeven:

Oplossing 3 (nieuwe tabel):

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 dit voorbeeld is de beperking fk_student_score_subject_id is een externe sleutel die uit twee kolommen bestaat:score_id en subject_id . Deze twee vreemde-sleutelkolommen verwijzen naar twee kolommen in de tabel score_subjectscore_id en subject_id .

Hier is nog een voorbeeld:

Oplossing 4 (nieuwe tabel):

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

Discussie:

In deze code hebben we opnieuw de CONSTRAINT clausule met de naam van deze beperking. Gebruik namen die gemakkelijk te lezen en te begrijpen zijn. In ons voorbeeld gebruiken we de naam fk_student_city_id , die de relevante tabel en kolom aangeeft. Vervolgens schrijven we FOREIGN KEY en voeg (tussen haakjes) de naam toe van de kolom die de refererende sleutel wordt. Dan hebben we de REFERENCES clausule gevolgd door de naam van de tabel en kolom waarnaar wordt verwezen (hier:id ).

Oplossing 5 (bestaande tabel):

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

Discussie:

Het is ook mogelijk om een ​​nieuwe refererende sleutel toe te voegen aan een bestaande tabel. Hier wordt de tabel gewijzigd met behulp van een ALTER TABLE clausule. De tabelnaam (in ons voorbeeld student ) wordt geplaatst na de ALTER TABLE trefwoord. Vervolgens de ADD FOREIGN KEY clausule wordt gevolgd door de naam van de kolom die als refererende sleutel zal worden gebruikt. Dan hebben we de REFERENCES clause met de naam van de tabel waarnaar wordt verwezen en de naam van de kolom met de primaire sleutel tussen haakjes.

Houd er rekening mee dat de tabel die u aan het wijzigen bent, moet bestaan ​​voordat deze opdracht wordt uitgevoerd.

Oplossing 6 (bestaande tabel, externe sleutelbeperking):

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

Discussie:

Gebruik een query als deze als u een externe sleutelkolom een ​​naam wilt geven als een beperking voor een bestaande tabel. Hier heet de externe sleutelbeperking fk_student_city_id . Als u de naam van de beperking niet opgeeft, genereert de database een standaardnaam voor de beperking (die per database zal verschillen).


  1. Wat betekent de volgende Oracle-fout:ongeldige kolomindex

  2. Hoe tel je alle rijen bij gebruik van SELECT met LIMIT in MySQL-query?

  3. Alternatief voor lead lag-functie in SQL Server 2008

  4. Hoe input van de gebruiker te krijgen tijdens runtime