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!