SQL FOREIGN KEY Constraint
A FOREIGN KEY
constraint in SQL is used to link two tables together, enforcing referential integrity. It ensures that the values in a column of one table (the foreign key) match the values in the primary key of another table.
FOREIGN KEY: Definition and Usage
FOREIGN KEY
constraints are essential for maintaining relationships between tables in a relational database. They prevent actions that would destroy links between tables, helping to keep your data consistent and accurate. For example, you wouldn't want to delete a customer if there are still orders associated with that customer; a foreign key constraint helps enforce this rule.
Creating FOREIGN KEY Constraints
Foreign key constraints can be added during table creation (CREATE TABLE
) or later using ALTER TABLE
. The syntax varies slightly depending on your database system.
Adding FOREIGN KEY During Table Creation
This example creates the 'Orders' table with a foreign key constraint linking to the 'PersonID' column in the 'Persons' table (assumes 'Persons' table already exists with a 'PersonID' column).
Syntax (MySQL)
CREATE TABLE Orders (
OrderID INT NOT NULL,
OrderNumber INT NOT NULL,
PersonID INT,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
Syntax (SQL Server, Oracle, MS Access)
CREATE TABLE Orders (
OrderID INT NOT NULL PRIMARY KEY,
OrderNumber INT NOT NULL,
PersonID INT FOREIGN KEY REFERENCES Persons(PersonID)
);
Output
Creates the 'Orders' table with a foreign key constraint on 'PersonID', referencing the primary key 'PersonID' in the 'Persons' table. This prevents you from adding an order with a non-existent 'PersonID'.
Adding Named FOREIGN KEY Constraints and Multi-Column Keys
You can name your foreign key constraint for better organization and create foreign keys based on multiple columns.
Syntax
CREATE TABLE Orders (
OrderID INT NOT NULL,
OrderNumber INT NOT NULL,
PersonID INT,
PRIMARY KEY (OrderID),
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
Output
Creates the 'Orders' table with a named foreign key constraint ('FK_PersonOrder').
Adding a FOREIGN KEY After Table Creation
You can add a foreign key to an existing table using ALTER TABLE
.
Syntax
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
--Named constraint:
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
Output
Adds a foreign key constraint to the existing 'Orders' table.
Dropping FOREIGN KEY Constraints
To remove a foreign key constraint, you use the DROP CONSTRAINT
statement (or DROP FOREIGN KEY
in MySQL).
Syntax (MySQL)
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
Syntax (SQL Server, Oracle, MS Access)
ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;
Output
Removes the foreign key constraint 'FK_PersonOrder' from the 'Orders' table. The link between 'Orders' and 'Persons' tables is removed.