Trigger and Stored Procedure

Trigger and Stored Procedure

 Tables Setup

CREATE TABLE Department (
    D_id INT PRIMARY KEY,
    D_name VARCHAR(50)
);


CREATE TABLE Student (
    S_id INT PRIMARY KEY,
    S_name VARCHAR(50),
    D_id INT,
    FOREIGN KEY (D_id) REFERENCES Department(D_id)
);


CREATE TABLE Subject (
    Sub_id INT PRIMARY KEY,
    Sub_name VARCHAR(50)
);


CREATE TABLE Marks (
    S_id INT,
    Sub_id INT,
    Marks INT,
    FOREIGN KEY (S_id) REFERENCES Student(S_id),
    FOREIGN KEY (Sub_id) REFERENCES Subject(Sub_id)
);


Stored Procedure Example

👉 Example Task: Find average marks of a student.

DELIMITER $$

CREATE PROCEDURE Get_AvgMarks (IN student_id INT)
BEGIN
    SELECT S.S_name, AVG(M.Marks) AS Average_Marks
    FROM Marks M
    JOIN Student S ON M.S_id = S.S_id
    WHERE M.S_id = student_id
    GROUP BY S.S_name;
END$$

DELIMITER ;

 Usage:

CALL Get_AvgMarks(1);

 Trigger Example

Example Task: If marks are inserted more than 100, automatically correct them to 100.

DELIMITER $$

CREATE TRIGGER Check_Marks
BEFORE INSERT ON Marks
FOR EACH ROW
BEGIN
    IF NEW.Marks > 100 THEN
        SET NEW.Marks = 100;
    END IF;
END$$

DELIMITER ;

 Usage:

INSERT INTO Marks VALUES (1, 101, 120);

Example: 

Requirement

  • When a new student is inserted into the Student table,

  • Automatically insert that student’s S_id into the Marks table for all subjects,

  • With Marks = NULL initially.


DELIMITER $$

CREATE TRIGGER After_Student_Insert
AFTER INSERT ON Student
FOR EACH ROW
BEGIN
    INSERT INTO Marks (S_id, Sub_id, Marks)
    SELECT NEW.S_id, Sub_id, NULL
    FROM Subject;
END$$

DELIMITER ;




Comments

Popular posts from this blog

Data Control Language

Checkpoint

SUB Queries