मॉड्यूल पाठ (4/4)
लेन-देन: सभी या कुछ भी नहीं
लेन-देन संचालन का एक समूह है जिसे डेटाबेस मानता है
एकल इकाई: या तो वे सभी सफल होते हैं, या उनमें से कोई भी नहीं छोड़ता
ट्रेस. यह इस प्रकार है कि आप अनुक्रम के दौरान स्वयं को विसंगतियों से बचाते हैं
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 से पहले था।
क्लासिक परिदृश्य: स्थानांतरण
विहित उदाहरण उत्पादों (या धन) के बीच स्टॉक स्थानांतरण है
खातों के बीच स्थानांतरण): दो UPDATEs जिन्हें एक साथ सफल होना चाहिए,
कभी भी एक हां और दूसरा ना.
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 सेकंड में एसिड
लेन-देन एसिड गुणों की गारंटी देते हैं:
- एटोमिसिटी - सब कुछ या कुछ भी नहीं;
- सीअस्थिरता - लेन-देन की शुरुआत और अंत में बाधाएं संतुष्ट रहती हैं;
- मैंसमाधान - समवर्ती लेनदेन में मध्यवर्ती स्थिति नहीं दिखती (विभिन्न "स्तरों" पर);
- डीयूरेबिलिटी - एक सफल
COMMITदुर्घटना की स्थिति में भी नष्ट नहीं होता है।
आपकी बारी
एक ही लेन-देन में: उत्पाद 1 के स्टॉक में 1 की कमी और उत्पाद 2 के स्टॉक में 1 की वृद्धि। BEGIN के साथ खोलें और COMMIT के साथ बंद करें।
संकेत दिखाएँ
संबंधित SET क्लॉज में संदर्भ स्टॉक - 1 और स्टॉक + 1।
3 प्रयासों के बाद समाधान उपलब्ध है
व्यायाम की समीक्षा करें
एक लेन-देन खोलें, ग्राहक के शहर को आईडी=1 से 'स्पेरिमेंटेल' में अपडेट करने का प्रयास करें, फिर रोलबैक के साथ ऑपरेशन रद्द करें। अंत में ग्राहक 1 का शहर मूल शहर ('मिलानो') होना चाहिए।
संकेत दिखाएँ
रोलबैक BEGIN के बाद से किए गए प्रत्येक परिवर्तन को रद्द कर देता है।
3 प्रयासों के बाद समाधान उपलब्ध है