SQL Foreign Key

Introduction

In this chapter, we will learn about the FOREIGN KEY constraint in SQL. The FOREIGN KEY constraint is used to link two tables together. This chapter will cover the syntax, usage, and provide examples to help you understand how to use the FOREIGN KEY constraint effectively.

What is a Foreign Key?

A foreign key is a column or a set of columns in one table that refers to the primary key columns in another table. The table containing the foreign key is called the child table, and the table containing the primary key is called the parent table. The foreign key constraint ensures referential integrity of the data between the child and parent tables.

Syntax for Foreign Key

Basic Syntax

When creating a table, you can define a foreign key using the following syntax:

CREATE TABLE child_table (
    column1 datatype,
    column2 datatype,
    ...
    FOREIGN KEY (column_name) REFERENCES parent_table (primary_key_column)
);

Example

Assume we have two tables named employees and departments:

CREATE TABLE departments (
    department_id INT PRIMARY KEY,
    department_name VARCHAR(50)
);

CREATE TABLE employees (
    id INT PRIMARY KEY AUTO_INCREMENT,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    email VARCHAR(100),
    department_id INT,
    salary DECIMAL(10, 2),
    FOREIGN KEY (department_id) REFERENCES departments(department_id)
);

In this example, the department_id column in the employees table is a foreign key that references the department_id column in the departments table.

Step-by-Step Example

1. Create Sample Tables

First, we will create the departments and employees tables with the foreign key relationship.

CREATE TABLE departments (
    department_id INT PRIMARY KEY,
    department_name VARCHAR(50)
);

CREATE TABLE employees (
    id INT PRIMARY KEY AUTO_INCREMENT,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    email VARCHAR(100),
    department_id INT,
    salary DECIMAL(10, 2),
    FOREIGN KEY (department_id) REFERENCES departments(department_id)
);

2. Insert Sample Data into departments Table

INSERT INTO departments (department_id, department_name)
VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');

3. Insert Sample Data into employees Table

INSERT INTO employees (first_name, last_name, email, department_id, salary)
VALUES
('Ramesh', 'Kumar', 'ramesh.kumar@example.com', 1, 50000),
('Sita', 'Patel', 'sita.patel@example.com', 2, 60000),
('Arjun', 'Singh', 'arjun.singh@example.com', 1, 55000),
('Priya', 'Sharma', 'priya.sharma@example.com', 2, 62000),
('Ramesh', 'Kumar', 'ramesh.kumar2@example.com', 3, 50000);

4. Verify the Foreign Key Constraint

To verify the foreign key constraint, try to insert a record into the employees table with a department_id that does not exist in the departments table:

INSERT INTO employees (first_name, last_name, email, department_id, salary)
VALUES ('Ravi', 'Verma', 'ravi.verma@example.com', 4, 70000);

This command will result in an error because the department_id 4 does not exist in the departments table, demonstrating that the foreign key constraint enforces referential integrity.

5. Cascading Actions with Foreign Key

You can define cascading actions for foreign keys to specify what happens when a referenced row is updated or deleted.

Example: ON DELETE CASCADE

CREATE TABLE employees (
    id INT PRIMARY KEY AUTO_INCREMENT,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    email VARCHAR(100),
    department_id INT,
    salary DECIMAL(10, 2),
    FOREIGN KEY (department_id) REFERENCES departments(department_id) ON DELETE CASCADE
);

With the ON DELETE CASCADE option, deleting a row in the departments table will automatically delete all related rows in the employees table.

Example: ON UPDATE CASCADE

CREATE TABLE employees (
    id INT PRIMARY KEY AUTO_INCREMENT,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    email VARCHAR(100),
    department_id INT,
    salary DECIMAL(10, 2),
    FOREIGN KEY (department_id) REFERENCES departments(department_id) ON UPDATE CASCADE
);

With the ON UPDATE CASCADE option, updating a department_id in the departments table will automatically update the corresponding department_id in the employees table.

Conclusion

The FOREIGN KEY constraint is essential for maintaining referential integrity between tables in a relational database. This chapter covered the basic syntax for defining foreign keys, inserting data while maintaining referential integrity, and using cascading actions. Understanding how to define and use foreign keys effectively will enhance your ability to design robust and reliable database schemas.

Comments

Spring Boot 3 Paid Course Published for Free
on my Java Guides YouTube Channel

Subscribe to my YouTube Channel (165K+ subscribers):
Java Guides Channel

Top 10 My Udemy Courses with Huge Discount:
Udemy Courses - Ramesh Fadatare