ماڈیول اسباق (4/4)
لین دین: تمام یا کچھ بھی نہیں۔
A ٹرانزیکشن آپریشنز کا ایک گروپ ہے جسے ڈیٹا بیس کے طور پر برتا جاتا ہے۔
ایک اکائی: یا تو وہ سب کامیاب ہو جاتے ہیں، یا ان میں سے کوئی بھی نہیں چھوڑتا
ٹریس یہ اس طرح ہے کہ آپ اپنے آپ کو متضاد ہونے سے بچاتے ہیں جب ایک ترتیب
کا UPDATE/INSERT/DELETE مستقل رہنا چاہیے۔
نحو
BEGIN; -- apri la transazione
UPDATE …;
INSERT …;
DELETE …;
SELECT …; -- puoi anche solo leggere
COMMIT; -- conferma tutte le modifiche
-- oppure
ROLLBACK; -- annulla tutte le modifiche, come se nulla fosseBEGIN اور COMMIT کے درمیان ہر چیز جوہری ہے: کوئی اور کنکشن نہیں
درمیانی حالت دیکھتا ہے۔ اگر پروگرام کریش ہو جاتا ہے یا اس پر عمل ہوتا ہے۔
ROLLBACK، ڈیٹا بیس بالکل ویسا ہی رہتا ہے جیسا کہ BEGIN سے پہلے تھا۔
کلاسک منظر: منتقلی
کیننیکل مثال مصنوعات کے درمیان اسٹاک کی منتقلی ہے (یا رقم
اکاؤنٹس کے درمیان منتقلی: دو UPDATE جن کو ایک ساتھ کامیاب ہونا چاہیے،
کبھی ایک ہاں اور دوسرا نہیں
BEGIN;
UPDATE products SET stock = stock - 1 WHERE id = 1;
UPDATE products SET stock = stock + 1 WHERE id = 2;
COMMIT;اگر دوسرا UPDATE ناکام ہوجاتا ہے (مثال کے طور پر CHECK رکاوٹ کی خرابی)، a
ROLLBACK پروڈکٹ 1 کے اسٹاک کو اس کی اصل قیمت پر بحال کرتا ہے۔
رول بیک: ڈی بی اے کا ڈیبگر
BEGIN;
UPDATE customers SET city = 'X' WHERE id = 1;
SELECT first_name, city FROM customers WHERE id = 1; -- "vedo come è cambiato"
ROLLBACK;آزمانے کے لیے ایک بہت مفید نمونہ ایک UPDATE حقیقی ڈیٹا پر: آپ
اسے چلائیں، اسی لین دین میں SELECT کے ساتھ نتیجہ کا معائنہ کریں، اور
اگر یہ آپ کو قائل نہیں کرتا ہے، تو آپ ROLLBACK — ڈیٹا بیس بالکل ویسا ہی ہے
یہ پہلے تھا.
سیوپائنٹ: جزوی رول بیک
ٹرانزیکشن کے اندر آپ انٹرمیڈیٹ پوائنٹس بنا سکتے ہیں:
BEGIN;
UPDATE customers SET city = 'A' WHERE id = 1;
SAVEPOINT step1;
UPDATE customers SET city = 'B' WHERE id = 2;
-- mi sono accorto che il secondo UPDATE è sbagliato:
ROLLBACK TO SAVEPOINT step1;
COMMIT; -- solo il primo UPDATE viene confermato30 سیکنڈ میں ACID
لین دین ACID خصوصیات کی ضمانت دیتا ہے:
- A tomicity — تمام یا کچھ بھی نہیں؛
- C مستقل مزاجی - لین دین کے آغاز اور اختتام پر رکاوٹیں مطمئن رہتی ہیں؛
- Isolation — سمورتی لین دین میں درمیانی حالتیں نظر نہیں آتیں (مختلف "سطحوں" پر)؛
- D استحکام — ایک کامیاب
COMMITحادثے کی صورت میں بھی ضائع نہیں ہوتا ہے۔
آپ کی باری
ایک ہی لین دین میں: پروڈکٹ 1 کے اسٹاک میں 1 کی کمی اور پروڈکٹ کے اسٹاک میں 1 تک اضافہ۔ BEGIN کے ساتھ کھولیں اور COMMIT کے ساتھ بند کریں۔
اشارہ دکھائیں۔
حوالہ اسٹاک - 1 اور اسٹاک + 1 متعلقہ SET شقوں میں۔
3 کوششوں کے بعد حل دستیاب ہے۔
ورزش کا جائزہ لیں۔
ٹرانزیکشن کھولیں، id=1 کے ساتھ کسٹمر کے شہر کو 'Sperimentale' میں اپ ڈیٹ کرنے کی کوشش کریں، پھر ROLLBACK کے ساتھ آپریشن کو منسوخ کریں۔ آخر میں گاہک 1 کا شہر اصل ('Milano') ہونا چاہیے۔
اشارہ دکھائیں۔
ROLLBACK شروع سے اب تک کی گئی ہر تبدیلی کو منسوخ کر دیتا ہے۔
3 کوششوں کے بعد حل دستیاب ہے۔