sql >> Database >  >> RDS >> Database

SQL BUITENLANDSE SLEUTEL

In dit artikel leren we over de FOREIGN KEY-beperkingen en hoe u een FOREIGN KEY-beperking definieert om de relatie tussen twee tabellen op te bouwen.

In een relationeel databasebeheersysteem (RDBMS) is een FOREIGN KEY een veld of een aantal velden dat wordt gebruikt om een ​​relatie tussen twee tabellen op te bouwen of om de twee tabellen samen te voegen.

  • BUITENLANDSE SLEUTEL is ook bekend als referentiesleutel in het RDBMS
  • Door FOREIGN KEY-beperkingen tussen twee tabellen te gebruiken, definiëren we een ouder-kindrelatie tussen twee tabellen.
  • Het veld definieert de PRIMARY KEY-beperkingen in een tabel die bekend staat als de bovenliggende tabel, terwijl hetzelfde veld de FOREIGN KEY-beperkingen definieert in een andere tabel die bekend staat als de onderliggende tabel.
  • Er kan slechts één PRIMAIRE SLEUTEL in de tabel staan, maar er is geen gedefinieerde limiet voor de BUITENLANDSE SLEUTEL. We kunnen één of meer dan één BUITENLANDSE SLEUTEL op tafel hebben.
  • We kunnen FOREIGN KEY-beperkingen definiëren tijdens het maken van de tabel of FOREIGN KEY-beperkingen definiëren voor de reeds bestaande tabel.

Laten we een voorbeeld nemen om de beperkingen van FOREIGN KEY te begrijpen en er meer over te leren.

Voorbeeld:

Hier hebben we twee tafels, de ene is de cursustabel en de tweede is de studententafel:

De studenten kiezen cursussen. Het volgende FOREIGN KEY-beperkingenvoorbeeld is gedefinieerd op één veld.

Tafel nummer één:studententafel

Student_Id Voornaam Achternaam Email_Id Stad
101 Kareena Sayed [email protected] Hyderabad
102 Anmol Temani [email protected] Jalgaon
103 Harshal Patel [email protected] Mumbai
104 Sakshi Kap [email protected] Pune
105 Zeker Kohli [email protected] Hyderabad

Tabel nummer twee:cursustafel

Course_Id Cursusnaam Student_Id
C101 Java 101
C102 SQL 102
C103 SOA Null
C104 SAP 104
C105 MuleSoft 103
C101 Java 105

In de tabel Student is het veld Student_Id de PRIMARY KEY en in de tabel Cursus is Student_Id de FOREIGN KEY.

De FOREIGN KEY constraint voorkomt dat ongeldige gegevens worden ingevoegd in de refererende-sleutelkolom omdat het een van de waarden in de bovenliggende tabel moet zijn.

Definieer BUITENLANDSE KEY-beperkingen op CREATE TABLE

Het volgende voorbeeld definieert een BUITENLANDSE SLEUTEL in de cursustabel.

Eerst hebben we de Student-tabel gemaakt met de volgende velden:

CREATE TABLE Student( Student_Id int NOT NULL, First_Name varchar(40) NOT NULL, Last_Name varchar(40) NOT NULL, Email_Id varchar(50),  City varchar(20) NOT NULL, PRIMARY KEY(Student_Id));

Het volgende voorbeeld laat zien hoe u de FOREIGN KEY-beperkingen in de andere tabel definieert.

Tafelnaam Cursus:

CREATE TABLE Course( Course_Id int NOT NULL, Course_Name varchar(40) NOT NULL, Student_Id int, FOREIGN KEY(Student_Id) REFERENCES Student(Student_Id));

In de cursustabel hebben we geen PRIMAIRE SLEUTEL gedefinieerd. Definieer gewoon de FOREIGN KEY-beperkingen op de Student_Id.

Het volgende voorbeeld van FOREIGN KEY-beperkingen is gedefinieerd voor meerdere velden.

Stel dat we drie tabellen hebben, één is de Package-tabel, de tweede is de Data-tabel en de derde is de Talk_time-tabel:

Tabel 1:Pakket:

Package_Id Data_Id Talktime_Id
P1001 D1003 T1001
P1002 D1001 T1002
P1003 D1002 T1003
P1004 D1003 T1004
P1005 D1004 T1005

Tabel 2:Gegevens:

Data_Id Data_Limit Data_Price
D1001 5 120
D1002 3 75
D1003 6 150
D1004 10 240
D1005 15 320

Tabel 3:Talk_Time:

Talk_Time_Id Talk_Time _Limit Talk_Time _Price
T1001 120 130
T1002 70 105
T1003 60 90
T1004 200 220
T1005 150 170

In de tabel Talk_Time is Talk_Time_Id de PRIMAIRE SLEUTEL.

In de gegevenstabel is Data_Id de PRIMAIRE SLEUTEL.

Terwijl in de pakkettabel Talk_Time_Id en Data_Id de FOREIGN-sleutels zijn

Tabel nummer één:gegevens:

CREATE TABLE Data(Data_Id varchar(5) NOT NULL, Data_Limit int, Data_Price int, PRIMARY KEY(Data_Id));

Tabel nummer twee:Talk_Time:

CREATE TABLE Talk_Time(Talk_Time_Id varchar(5) NOT NULL, Talk_Time_Limit int, Talk_Time_Price int , PRIMARY KEY(Talk_Time_Id));

Tabel nummer drie:Pakket:

CREATE TABLE Package(Package_Id varchar(5) NOT NULL, Data_Id varchar(5), Talk_Time_Id varchar(5), FOREIGN KEY(Data_Id) REFERENCES Data(Data_Id), FOREIGN KEY(Talk_Time_Id) REFERENCES Talk_Time(Talk_Time_Id));

BUITENLANDSE KEY-beperkingen met behulp van ALTER TABLE:

Stel dat we de tabel al hebben gemaakt en de FOREIGN KEY-beperkingen op het veld willen definiëren. In een dergelijk geval zullen we de ALTER TABLE-query gebruiken om FOREIGN KEY-beperkingen toe te voegen.

De follow-query wordt gebruikt om FOREIGN KEY-beperkingen toe te voegen aan het veld Student_Id.

ALTER TABLE Course ADD FOREIGN KEY(Student_Id) REFERENCES Student(Student_Id);

ADD Trefwoord wordt gebruikt na de tabelnaam om de FOREIGN KEY-beperkingen toe te voegen aan de reeds bestaande tabel.

DROP FOREIGN KEY-beperking uit de tabel

Gebruik de volgende query om de FOREIGN KEY-beperking uit de tabel te verwijderen.

ALTER TABLE Course DROP FOREIGN KEY course_ibfk_1;

Het drop-trefwoord wordt gebruikt om FOREIGN KEY-beperkingen uit het veld Student_Id te verwijderen.

course_ibfk_1 is de naam van de externe sleutelbeperking.

We kunnen null-waarden hebben in het veld FOREIGN KEY-beperkingen. We kunnen dubbele waarden hebben in het veld FOREIGN KEY-beperkingen.


  1. MySQL draaitabelquery met dynamische kolommen

  2. Schakel een partitie in SQL Server (T-SQL) uit

  3. Meerdere rijen invoegen met pg-promise

  4. Herstelapparaat zonder gegevensverlies