A FOREIGN KEY in SQL is a column or a group of columns in a table that uniquely identifies a row of another table. It creates a relationship between the data in two tables. The FOREIGN KEY
constraint ensures the referential integrity of the data by making sure that a value in the foreign key column matches a primary key in another table.
🎨 Pro Tip: A FOREIGN KEY
helps maintain data consistency across tables, allowing you to link records in one table to those in another.
A FOREIGN KEY
constraint is used to enforce a link between two tables. Here's how you can define a foreign key during table creation:
Example: Create a users table and a posts table with a FOREIGN KEY
:
CREATE TABLE users ( user_id INT PRIMARY KEY, username VARCHAR(50) NOT NULL ); CREATE TABLE posts ( post_id INT PRIMARY KEY, user_id INT, post_content TEXT, FOREIGN KEY (user_id) REFERENCES users(user_id) );
In this example, the posts
table has a user_id
column that links to the user_id
column in the users
table using the FOREIGN KEY
constraint. This ensures that each post is associated with a valid user.
When you insert data into a table with a foreign key, the database ensures that the foreign key values match the primary key values in the referenced table. Here's an example of inserting data:
Example: Insert valid and invalid data into the posts table:
-- Valid Insert (user_id 1 exists in the users table) INSERT INTO posts (post_id, user_id, post_content) VALUES (1, 1, 'This is a valid post.'); -- Invalid Insert (user_id 99 does not exist in the users table) INSERT INTO posts (post_id, user_id, post_content) VALUES (2, 99, 'This will fail because user_id 99 does not exist in the users table.');
The second insert will fail because the user_id
"99" does not exist in the users
table. The FOREIGN KEY
constraint ensures referential integrity.
🛠️ Interactive Task: Try inserting posts with different user_id
values and observe the behavior. What happens when the foreign key does not match the primary key in the referenced table?
If you have an existing table and want to add a foreign key, you can use the ALTER TABLE
statement:
Example: Alter the posts table to add a FOREIGN KEY
on the user_id
column:
ALTER TABLE posts ADD FOREIGN KEY (user_id) REFERENCES users(user_id);
This will add the FOREIGN KEY
constraint on the user_id
column, establishing the relationship with the users
table.
If you attempt to delete or update a record in the referenced table (e.g., users
) that is still being referenced in the child table (e.g., posts
), a foreign key violation will occur unless specific actions are defined.
Example: Define actions for foreign key violations (like ON DELETE CASCADE
):
CREATE TABLE posts ( post_id INT PRIMARY KEY, user_id INT, post_content TEXT, FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE );
In this case, when a record in the users
table is deleted, all related posts in the posts
table will also be deleted automatically due to the ON DELETE CASCADE
rule.
FOREIGN KEY
constraint ensures that you only reference valid rows in another table.CASCADE
, SET NULL
, or NO ACTION
to handle foreign key violations.
🎯 Interactive Task: Experiment with different foreign key actions such as ON UPDATE CASCADE
and ON DELETE SET NULL
. What happens to the child table when a record in the parent table is modified or deleted?
Help others discover Technorank Learning by sharing your honest experience.
Your support inspires us to keep building!