مرکزی مواد پر جائیں
ماڈیول 11 · سبق 1 از 4کورس میں 41/57~15 min
ماڈیول اسباق (1/4)

ACID ٹرانزیکشنز (BEGIN/COMMIT)

کسی بھی ڈیٹا بیس کے لیے اعتبار کی بنیادیں ACID مخفف پر باقی ہیں:

  • A tomicity: ایک آپریشن یا تو مکمل طور پر مکمل ہو جاتا ہے (کمٹ) یا ناکام ہو جاتا ہے جس کے پیچھے کوئی آدھے کام کا نشان باقی نہیں رہتا (رول بیک)۔
  • Cمستقل مزاجی: ڈیٹا بیس کے قواعد (جیسے رکاوٹیں، غیر ملکی چابیاں) کا ہمیشہ احترام کیا جاتا ہے۔
  • Iسولیشن: ایک ہی وقت میں ہونے والے لین دین بے قابو طریقوں سے ایک دوسرے کے ساتھ مداخلت نہیں کرتے ہیں۔
  • D استحکام: ایک کمٹ کے بعد، تبدیلی کو ناقابل واپسی طور پر ڈسک پر لکھا جاتا ہے۔

لین دین کا نحو

عام طور پر ہر ایک اپ ڈیٹ یا DELETE استفسار کو اسٹینڈ اسٹون ٹرانزیکشن (آٹوکمیٹ) سمجھا جاتا ہے۔ لیکن جب آپ متعدد کارروائیوں کو ایک ساتھ گروپ کرنا چاہتے ہیں، مثال کے طور پر گاہک کے اکاؤنٹ سے ڈیبٹ کرنا اور آرڈر دینا، تو آپ کو لین دین کی ترکیب کا استعمال کرتے ہوئے اسے واضح طور پر کرنا ہوگا۔

SQL
BEGIN;

UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
INSERT INTO orders (user_id, total) VALUES (1, 100);

COMMIT; -- Writes the changes

اگر ان پیچیدہ ایگزیکیوشنز کے دوران جاوا اسکرپٹ ایپ جس نے استفسار کیا تھا اسے احساس ہوتا ہے کہ کوئی مسئلہ ہے (مثال کے طور پر گودام میں کافی اسٹاک نہیں ہے اور یہ کریش ہو جاتا ہے)، یہ ایک بھیجے گا:

SQL
ROLLBACK; -- Cancels the changes and discards the 2 queries sent in the block

خود ہی آزمائیں۔

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

ایک ٹرانزیکشن کھولیں۔\nآئی ڈی 10 کے ساتھ پروڈکٹ کو عارضی ٹیبل میں اس کی 'مقدار' کو 0 پر سیٹ کرتے ہوئے اپ ڈیٹ کریں (انتظار کی ضرورت نہیں، 'مقدار' پروڈکٹس پر نہیں ہے، آئیے ایجاد کرتے ہیں: 'order_items' میں 'unit_price' کو تبدیل کریں لیکن اس کے لیے ایک رکاوٹ درکار ہے۔\nآئیے بہتر کرتے ہیں: آئی ڈی 5 کو کامیابی کے ساتھ مکمل کرنے کے لیے: آرڈر کو مکمل کرنے کے لیے آئی ڈی 5 کو بہتر طریقے سے اپ ڈیٹ کریں۔

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

BEGIN; سے شروع کریں، id = 5 کے آرڈرز کو status='shipped' میں تبدیل کریں، پھر COMMIT کے ساتھ بھیجیں۔

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

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

پیداوار میں گھبراہٹ! ایک دیو نے WHERE کے بغیر ایک DELETE لکھا، تاریخی طور پر تمام جائزوں کو مٹا دیا۔\nآئیے انہیں دکھائیں کہ رول بیک کیسے کیا جاتا ہے۔ ایک ٹرانزیکشن شروع کریں، ایک فوری ڈیلیٹ کو فائر کریں جو 'جائزہ' سے ہر چیز کو مٹا دیتا ہے (بغیر WHERE شق کے)، لیکن پھر بلاک کو مکمل کرنے سے پہلے اثر کو کالعدم کرنے کے لیے SQL لائف سیور کا استعمال کریں۔

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

شروع کریں، 'جائزہ' پر کلین سلیٹ ڈیلیٹ، اور پھر جادوئی رول بیک؛ آخر میں

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