مرکزی مواد پر جائیں
ماڈیول 8 · سبق 4 از 4کورس میں 32/57~10 min
ماڈیول اسباق (4/4)

لین دین: تمام یا کچھ بھی نہیں۔

A ٹرانزیکشن آپریشنز کا ایک گروپ ہے جسے ڈیٹا بیس کے طور پر برتا جاتا ہے۔ ایک اکائی: یا تو وہ سب کامیاب ہو جاتے ہیں، یا ان میں سے کوئی بھی نہیں چھوڑتا ٹریس یہ اس طرح ہے کہ آپ اپنے آپ کو متضاد ہونے سے بچاتے ہیں جب ایک ترتیب کا UPDATE/INSERT/DELETE مستقل رہنا چاہیے۔

نحو

SQL
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 fosse

BEGIN اور COMMIT کے درمیان ہر چیز جوہری ہے: کوئی اور کنکشن نہیں درمیانی حالت دیکھتا ہے۔ اگر پروگرام کریش ہو جاتا ہے یا اس پر عمل ہوتا ہے۔ ROLLBACK، ڈیٹا بیس بالکل ویسا ہی رہتا ہے جیسا کہ BEGIN سے پہلے تھا۔

کلاسک منظر: منتقلی

کیننیکل مثال مصنوعات کے درمیان اسٹاک کی منتقلی ہے (یا رقم اکاؤنٹس کے درمیان منتقلی: دو UPDATE جن کو ایک ساتھ کامیاب ہونا چاہیے، کبھی ایک ہاں اور دوسرا نہیں

SQL
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 کے اسٹاک کو اس کی اصل قیمت پر بحال کرتا ہے۔

رول بیک: ڈی بی اے کا ڈیبگر

SQL
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 — ڈیٹا بیس بالکل ویسا ہی ہے یہ پہلے تھا.

سیوپائنٹ: جزوی رول بیک

ٹرانزیکشن کے اندر آپ انٹرمیڈیٹ پوائنٹس بنا سکتے ہیں:

SQL
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 confermato

30 سیکنڈ میں ACID

لین دین ACID خصوصیات کی ضمانت دیتا ہے:

  • A tomicity — تمام یا کچھ بھی نہیں؛
  • C مستقل مزاجی - لین دین کے آغاز اور اختتام پر رکاوٹیں مطمئن رہتی ہیں؛
  • Isolation — سمورتی لین دین میں درمیانی حالتیں نظر نہیں آتیں (مختلف "سطحوں" پر)؛
  • D استحکام — ایک کامیاب COMMIT حادثے کی صورت میں بھی ضائع نہیں ہوتا ہے۔

آپ کی باری

ورزش#sql.m8.l4.e1
کوششیں: 0لوڈ ہو رہا ہے…

ایک ہی لین دین میں: پروڈکٹ 1 کے اسٹاک میں 1 کی کمی اور پروڈکٹ کے اسٹاک میں 1 تک اضافہ۔ BEGIN کے ساتھ کھولیں اور COMMIT کے ساتھ بند کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

حوالہ اسٹاک - 1 اور اسٹاک + 1 متعلقہ SET شقوں میں۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش کا جائزہ لیں۔

ورزش#sql.m8.l4.e2
کوششیں: 0لوڈ ہو رہا ہے…

ٹرانزیکشن کھولیں، id=1 کے ساتھ کسٹمر کے شہر کو 'Sperimentale' میں اپ ڈیٹ کرنے کی کوشش کریں، پھر ROLLBACK کے ساتھ آپریشن کو منسوخ کریں۔ آخر میں گاہک 1 کا شہر اصل ('Milano') ہونا چاہیے۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

ROLLBACK شروع سے اب تک کی گئی ہر تبدیلی کو منسوخ کر دیتا ہے۔

3 کوششوں کے بعد حل دستیاب ہے۔