Lesson 15 � Automation

DATA KI
AUTO GUARD.

Trigger automatic action hai � data insert hone pe, update hone pe kuch kaam ho jaata hai bina tumhare bole. Audit logging, validation, cascading changes � sab triggers se hota hai. Stored procedure ka advanced version jo database ke andar hi rehta hai.

? 20 min✓ Intermediate✓ Prerequisite: Stored Procedures

WHY: Trigger kyun zaroori hai?

Socho tum ek school management system bana rahe ho. Jab bhi naya student aata hai, tumhe uska record ek audit log mein bhi daalna hai. Agar tum har INSERT ke baad manually ek aur INSERT karo ge � galti hogi, bhool jaoge. Trigger se yeh kaam automatic ho jaata hai � student aaya, trigger ne log kar diya. Bina kisi extra query ke.

TRIGGER

Event pe auto execute hota hai. Jab INSERT, UPDATE ya DELETE hota hai, trigger apne aap fire ho jaata hai. Tumhe extra query likhni nahi padti.

BEFORE / AFTER

Kab trigger hona hai � action se pehle ya baad mein. BEFORE se data validate kar sakte ho, AFTER se logging kar sakte ho.

INSERT / UPDATE / DELETE

Kis event pe trigger hona hai. Har operation ke liye alag trigger bana sakte ho ya ek trigger mein multiple events handle kar sakte ho.

HOW: Trigger banana aur use karna

Trigger banane ka syntax stored procedure jaisa hai � CREATE TRIGGER se shuru hota hai. Lekin trigger tum call nahi karte � database khud call karta hai jab specified event hoti hai.

1. AFTER INSERT trigger � Audit logging

Naya student insert hone pe audit log mein entry daalo:

sql
-- After INSERT trigger
CREATE TRIGGER after_student_insert
AFTER INSERT ON students
FOR EACH ROW
BEGIN
 INSERT INTO audit_log (action, student_id, created_at)
 VALUES ('NEW STUDENT', NEW.id, NOW());
END;
NEW keyword: INSERT trigger mein NEW se naye row ke values access karte ho. NEW.id matlab abhi jo student insert hua uska id, NEW.name uska naam.

2. BEFORE INSERT trigger � Validation

Data insert se pehle validate karo � age 16 se kam ho toh reject karo:

sql
-- Before INSERT trigger (validation)
CREATE TRIGGER validate_age
BEFORE INSERT ON students
FOR EACH ROW
BEGIN
 IF NEW.age < 16 THEN
 SIGNAL SQLSTATE '45000'
 SET MESSAGE_TEXT = 'Age must be 16 or above';
 END IF;
END;
SIGNAL SQLSTATE: Yeh error throw karta hai. 45000 custom error code hai. Isse INSERT fail ho jaata hai aur error message dikhta hai client ko. BEFORE trigger mein yeh bahut useful hai � galat data database mein jaane se pehle hi rok sakte ho.

3. AFTER UPDATE trigger � History tracking

Marks update hone pe purana aur naya marks history mein save karo:

sql
-- After UPDATE trigger
CREATE TRIGGER after_marks_update
AFTER UPDATE ON students
FOR EACH ROW
BEGIN
 IF OLD.marks != NEW.marks THEN
 INSERT INTO marks_history (student_id, old_marks, new_marks, changed_at)
 VALUES (NEW.id, OLD.marks, NEW.marks, NOW());
 END IF;
END;
OLD vs NEW: UPDATE trigger mein dono available hain. OLD purani value, NEW nayi value. Sirf marks change hone pe history save ho rahi hai � unnecessary entries nahi aa rahi.

4. BEFORE DELETE trigger � Cleanup

Student delete hone se pehle uske related records bhi hatao:

sql
-- Before DELETE trigger
CREATE TRIGGER before_student_delete
BEFORE DELETE ON students
FOR EACH ROW
BEGIN
 DELETE FROM enrollments WHERE student_id = OLD.id;
 DELETE FROM marks WHERE student_id = OLD.id;
END;

5. Trigger drop karo

Agar trigger ki zaroorat nahi rahi:

sql
-- Trigger hatao
DROP TRIGGER after_student_insert;

-- MySQL mein check karo kaunse triggers hain
SHOW TRIGGERS;

-- PostgreSQL mein
SELECT trigger_name, event_manipulation, event_object_table
FROM information_schema.triggers
WHERE event_object_schema = 'public';

6. Trigger disable / enable karo (MySQL)

Temporary trigger disable karna ho toh:

sql
-- Trigger disable karo
ALTER TABLE students DISABLE TRIGGER after_student_insert;

-- Trigger enable karo
ALTER TABLE students ENABLE TRIGGER after_student_insert;

-- PostgreSQL mein ek trigger disable
ALTER TABLE students DISABLE TRIGGER validate_age;

Trigger execution flow

Trigger kaise fire hota hai � step by step:

sql
-- INSERT query chali
INSERT INTO students (name, age, marks) VALUES ('Rahul', 20, 92.5);

-- Kya hota hai internally:

-- Step 1: BEFORE INSERT trigger fire
-- validate_age trigger check karega
-- Agar age < 16 ✓ error throw, INSERT fail
-- Agar age >= 16 ✓ INSERT proceed

-- Step 2: Row actually inserted in students table

-- Step 3: AFTER INSERT trigger fire
-- after_student_insert trigger chalega
-- Audit log mein entry aa jaayegi

-- Flow: INSERT ✓ BEFORE ✓ Table mein data ✓ AFTER

Try it: Audit logging trigger banao

Neeche ke editor mein triggers create karo. Audit logging trigger banao jo har INSERT pe log kare, aur validation trigger banao jo age check kare.

SQL playgroundTriggers create karo aur test karo
Run Query dabayein

Quick check

Ek trigger banao jo naya student insert hone pe audit table mein uska student_id log kare. Trigger ka naam log_insert rakho.

CREATE TRIGGER se shuru karo, AFTER INSERT ON students likho, phir FOR EACH ROW BEGIN se trigger body shuru karo. NEW.id se naye student ka id milega. Syntax: CREATE TRIGGER log_insert AFTER INSERT ON students FOR EACH ROW BEGIN INSERT INTO audit(student_id) VALUES(NEW.id); END

Common beginner mistakes

Triggers clear hai?

Ab Subqueries par chalo � queries ke andar queries likho aur complex data extraction seekho.