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
Studenttable, -
Automatically insert that student’s
S_idinto theMarkstable for all subjects, -
With
Marks = NULLinitially.
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
Post a Comment