SQL FOREIGN KEY-begränsning

SQL FOREIGN KEY-begränsning

En tabellens FOREIGN KEY pekar på en PRIMARY KEY i en annan tabell.

Låt oss förklara foreign key med ett exempel. Se nedan två tabeller:

Tabellen "Persons":

Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

Tabellen "Orders":

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1

Observera att kolumnen "Id_P" i "Orders" pekar på kolumnen "Id_P" i tabellen "Persons".

Kolumnen "Id_P" i tabellen "Persons" är en PRIMARY KEY i tabellen "Persons".

Kolumnen "Id_P" i tabellen "Orders" är en FOREIGN KEY i tabellen "Orders".

FOREIGN KEY-konstraint används för att förhindra åtgärder som kan förstöra anslutningen mellan tabeller.

FOREIGN KEY-konstraint kan också förhindra att ogiltiga data införs i foreign key-kolumnen, eftersom den måste vara en av värdena i den tabell den pekar på.

FOREIGN KEY-konstraint vid CREATE TABLE

Nedanstående SQL skapar FOREIGN KEY för kolonnen "Id_P" när tabellen "Orders" skapas:

MySQL:

CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
)

SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
Id_O int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)

Om du behöver namnge FOREIGN KEY-begränsningen och definiera FOREIGN KEY-begränsningar för flera kolonner, använd följande SQL-syntax:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
)

SQL FOREIGN KEY-begränsning på ALTER TABLE

Om du skapar FOREIGN KEY-begränsningen för kolonnen "Id_P" när tabellen "Orders" redan finns, använd följande SQL:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)

Om du behöver namnge FOREIGN KEY-begränsningen och definiera FOREIGN KEY-begränsningar för flera kolonner, använd följande SQL-syntax:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)

Häva FOREIGN KEY-begränsning

Om du vill häva FOREIGN KEY-begränsningen, använd följande SQL:

MySQL:

ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

SQL Server / Oracle / MS Access:

ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders