🧪 SQL Server Transactions – COMMIT & ROLLBACK (हिंदी में)
🔑 Memory में रखें (परिभाषा)
Transaction एक logical block होता है जिसमें एक या एक से ज्यादा SQL commands को एक साथ run किया जाता है। अगर सारी queries सफल रहीं तो COMMIT, वरना ROLLBACK कर दिया जाता है।
🧾 Syntax
BEGIN TRANSACTION
-- आपकी SQL statements
IF (No Error)
COMMIT
ELSE
ROLLBACK
📘 Example: Transfer Money
मान लीजिए दो खातों के बीच ट्रांसफर करना है:
BEGIN TRANSACTION;
BEGIN TRY
UPDATE Accounts SET Balance = Balance - 1000 WHERE AccountNo = 101;
UPDATE Accounts SET Balance = Balance + 1000 WHERE AccountNo = 102;
COMMIT;
END TRY
BEGIN CATCH
ROLLBACK;
SELECT ERROR_MESSAGE() AS ErrorDetail;
END CATCH;
🔁 Transaction Properties (ACID)
हर Transaction को सही और सुरक्षित तरीके से execute करने के लिए ACID properties को follow किया जाता है:
- 🔸 Atomicity (एटोमिकिटी):
पूरा transaction या तो पूरी तरह सफल हो या पूरी तरह असफल हो। - 🔸 Consistency (कंसिस्टेंसी):
Database हमेशा valid state में रहना चाहिए। - 🔸 Isolation (आइसोलेशन):
एक transaction दूसरी को effect ना करे। - 🔸 Durability (ड्यूराबिलिटी):
Once COMMIT → डेटा हमेशा के लिए सुरक्षित।
🔁 Transaction Properties (ACID)
हर Transaction को सही और सुरक्षित तरीके से execute करने के लिए ACID properties को follow किया जाता है:
-
🔸 Atomicity (एटोमिकिटी):
इसका मतलब है कि पूरी transaction एक unit की तरह execute होती है। या तो सारी queries पूरी होंगी या एक भी नहीं।
👉 जैसे बैंक ट्रांसफर में पैसा कटे भी और जुड़ भी जाए। बीच में रुका तो सब undo हो जाए। -
🔸 Consistency (कंसिस्टेंसी):
Transaction के बाद डाटा की स्थिति सही और valid रहनी चाहिए। कोई भी invalid या गलत डाटा database में नहीं रहना चाहिए।
👉 बैंक बैलेंस negative नहीं होना चाहिए। -
🔸 Isolation (आइसोलेशन):
जब multiple transactions एक साथ चल रही हों तो वे एक-दूसरे को प्रभावित न करें। ऐसा लगे जैसे वे अकेली ही चल रही हों।
👉 दो users एक साथ खरीदारी कर रहे हों तो एक का transaction दूसरे को disturb न करे। -
🔸 Durability (ड्यूराबिलिटी):
अगर transaction commit हो गई तो वो permanent है, चाहे system crash हो जाए।
👉 एक बार पैसा कट गया तो वह वापस नहीं आएगा जब तक नया transaction न हो।
📌 Practical Example – ACID को Live करके देखें
मान लीजिए हमारे पास एक Student और Fees table है:
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
Name NVARCHAR(50),
Balance INT
);
CREATE TABLE Fees (
FeeID INT PRIMARY KEY IDENTITY,
StudentID INT,
AmountPaid INT
);
BEGIN TRANSACTION;
BEGIN TRY
DECLARE @Amount INT = 500;
IF ((SELECT Balance FROM Students WHERE StudentID = 1) >= @Amount)
BEGIN
UPDATE Students SET Balance = Balance - @Amount WHERE StudentID = 1;
INSERT INTO Fees (StudentID, AmountPaid) VALUES (1, @Amount);
COMMIT;
END
ELSE
BEGIN
RAISERROR ('Insufficient Balance', 16, 1);
END
END TRY
BEGIN CATCH
ROLLBACK;
SELECT ERROR_MESSAGE() AS ErrorDetail;
END CATCH;
🧪 5 Practical Examples – ACID के Live Implementation
- Atomicity: एक ही transaction में दो inserts → एक fail हो तो दोनों rollback
BEGIN TRAN; INSERT INTO Students VALUES (1, 'Amit', 2000); INSERT INTO Students VALUES (1, 'Amit', 3000); -- Duplicate PK → fails COMMIT;
- Consistency: Salary का payment बिना balance check → गलत
BEGIN TRAN; IF ((SELECT Balance FROM Students WHERE StudentID = 1) >= 2000) BEGIN UPDATE Students SET Balance = Balance - 2000 WHERE StudentID = 1; COMMIT; END ELSE BEGIN ROLLBACK; END
- Isolation: दो user same account update करें → dirty read रोकना
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; BEGIN TRAN; UPDATE Students SET Balance = Balance - 100 WHERE StudentID = 1; WAITFOR DELAY '00:00:10'; COMMIT;
- Durability: COMMIT के बाद crash भी हो जाए तो डेटा बचा रहेगा
📌 COMMIT होते ही SQL Server log के ज़रिए data save कर देता है।
- ACID Combo: एक complete logical transaction:
BEGIN TRY BEGIN TRAN; UPDATE Students SET Balance = Balance - 800 WHERE StudentID = 1; INSERT INTO Fees (StudentID, AmountPaid) VALUES (1, 800); COMMIT; END TRY BEGIN CATCH ROLLBACK; SELECT ERROR_MESSAGE(); END CATCH
🧠 INTERVIEW QUESTIONS (with Answers)
- Q: Transaction क्या होता है?
Ans: Multiple SQL commands को एक logical unit में run करने की प्रक्रिया। - Q: COMMIT और ROLLBACK में अंतर?
Ans: COMMIT changes save करता है, ROLLBACK undo करता है। - Q: क्या हम nested transaction बना सकते हैं?
Ans: हाँ, लेकिन केवल outermost commit effective होता है। - Q: BEGIN TRAN और BEGIN TRY में क्या अंतर है?
Ans: BEGIN TRY error catch के लिए होता है, BEGIN TRAN transaction शुरू करने के लिए। - Q: Transaction क्यों जरूरी है?
Ans: Data integrity और failure में recovery के लिए।
📘 यह पोस्ट Job Oriented Academy द्वारा SQL में secure data operations समझाने के लिए बनाई गई है।
0 Comments