4.4.12 · HinglishDatabases

Stored procedures, triggers, functions

1,999 words9 min readRead in English

4.4.12 · Coding › Databases


1. Stored Procedures

WHY yeh exist karte hain? Paisa transfer karne ki imagine karo: tumhe (1) account A se subtract karna hai, (2) account B mein add karna hai. Agar tumhari app yeh do alag queries mein karti hai aur beech mein crash ho jaaye, toh paisa gayab ho jaata hai. Ek stored procedure dono ko ek server-side call mein wrap karta hai taaki logic — aur uska transaction — ek trusted jagah mein rahe.

HOW yeh dikhta hai (MySQL syntax):

DELIMITER //
CREATE PROCEDURE transfer(IN src INT, IN dst INT, IN amt DECIMAL(10,2))
BEGIN
  START TRANSACTION;
  UPDATE accounts SET balance = balance - amt WHERE id = src;
  UPDATE accounts SET balance = balance + amt WHERE id = dst;
  COMMIT;
END //
DELIMITER //
-- call it:
CALL transfer(1, 2, 100.00);

2. Functions (User-Defined Functions, UDFs)

WHY procedures se alag? Kyunki query planner ko ise query ke andar har row ke liye call karna hota hai. SELECT discount(price) FROM items ka koi matlab nahi hota agar discount koi COMMIT transaction kar sake ya kuch return na kare.

DELIMITER //
CREATE FUNCTION net_price(price DECIMAL(10,2), rate DECIMAL(4,3))
RETURNS DECIMAL(10,2)
DETERMINISTIC
BEGIN
  RETURN price * (1 + rate);
END //
DELIMITER //
-- use inside a query:
SELECT name, net_price(price, 0.18) AS with_tax FROM products;
Stored Procedure Function
Invoke hota hai CALL (explicitly) SQL expressions ke andar
Return karta hai optional (OUT params) exactly ek value
Data modify kar sakta hai haan usually nahi / restricted
Transactions haan typically nahi
SELECT mein use nahi haan

3. Triggers

WHY triggers? Rules enforce karne ke liye chahe table ko koi bhi ya kuch bhi touch kare — even ek careless admin jo raw SQL run kar raha ho. Common uses: audit logs, derived columns auto-maintain karna, validation, cascading updates.

Magic pseudo-tables: OLD aur NEW

  • NEW.colincoming value (INSERT aur UPDATE mein available).
  • OLD.colprevious value (UPDATE aur DELETE mein available).
DELIMITER //
CREATE TRIGGER audit_salary
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
  IF NEW.salary <> OLD.salary THEN
    INSERT INTO salary_log(emp_id, old_sal, new_sal, changed_at)
    VALUES (OLD.id, OLD.salary, NEW.salary, NOW());
  END IF;
END //
DELIMITER //
Figure — Stored procedures, triggers, functions

Common Mistakes (Steel-manned)


Recall Feynman: ek 12-saal ke bachche ko explain karo

Database ko ek toy box socho. Normally tum andar jaate ho aur toys rearrange karte ho.

  • Ek stored procedure "Tidy Up" label wale button ki tarah hai — tum ise press karte ho aur yeh tumhare liye bahut saare steps karta hai.
  • Ek function box ke andar ek chhote calculator ki tarah hai — tum ise numbers dete ho aur yeh ek answer wapas deta hai, taaki tum ise doosri math karte waqt use kar sako.
  • Ek trigger ek magic sensor ki tarah hai: jab bhi tum koi toy add ya remove karte ho, yeh automatically ek diary mein note likhta hai — tumne isse kaha nahi, yeh bas hamesha karta hai.

Connections

  • Transactions and ACID — procedures multi-statement atomic units wrap karte hain.
  • SQL Queries (SELECT, JOIN) — functions in expressions mein plug hote hain.
  • Database Normalization — triggers derived/denormalized columns maintain kar sakte hain.
  • Indexes — deterministic functions functional indexes power kar sakte hain.
  • Concurrency Control — triggers aur procedures locks ke under run karte hain.

Stored procedure ko kaun invoke karta hai?
Ek explicit CALL procName(args) statement.
Function ko hamesha kya karna padta hai jo procedure ko nahi karna?
Exactly ek value return karna (RETURNS type + RETURN).
Kya stored procedure ko SELECT clause ke andar use kar sakte hain?
Nahi — sirf functions ko SQL expressions mein embed kiya ja sakta hai.
Trigger ki do timings kya hain?
BEFORE aur AFTER data event ke.
Kin trigger events mein OLD available hota hai?
UPDATE aur DELETE mein (previous row values).
Kin trigger events mein NEW available hota hai?
INSERT aur UPDATE mein (incoming row values).
Trigger mein AFTER ki jagah BEFORE kyun use karein?
Incoming NEW row ko likhne se pehle validate ya modify karne ke liye.
FOR EACH ROW ka matlab kya hai?
Trigger per statement ek baar ki jagah har affected row ke liye ek baar fire hota hai.
DELIMITER // procedure definitions ke aas paas kyun aata hai?
Statement terminator change karne ke liye taaki inner ; procedure ka end na samjha jaaye.
Function ko DETERMINISTIC declare karna kya promise karta hai?
Same inputs hamesha same output denge (koi hidden state / side effects nahi).
INOUT parameter kya karta hai?
Caller ko ek value pass-in karta hai aur ek (possibly modified) value wapas return karta hai.
Money transfer ke liye app-side logic se zyada stored procedure kyun prefer karein?
Yeh dono updates ko ek server-side atomic transaction mein wrap karta hai, taaki crash half-done transfer nahi chhhod sakta.
Kya DELETE trigger NEW reference kar sakta hai?
Nahi — DELETE mein koi new row nahi hoti; sirf OLD exist karta hai.

Concept Map

flavor

flavor

flavor

gives

invoked by

wraps

ensures

must produce

embedded in

deterministic so

reacts to

runs

Code in the database

Stored procedure

Function / UDF

Trigger

Invoked with CALL

Returns one value

Fires automatically

INSERT UPDATE DELETE

Server-side transaction

Atomicity invariants

Used inside SQL expressions

Less network chatter