మాడ్యూల్ పాఠాలు (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 స్టాక్ను దాని అసలు విలువకు పునరుద్ధరిస్తుంది.
ROLLBACK: DBA యొక్క డీబగ్గర్
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 — డేటాబేస్ సరిగ్గా ఇలాగే ఉంటుంది
అది ముందు ఉంది.
SAVEPOINT: పాక్షిక రోల్బ్యాక్
లావాదేవీ లోపల మీరు ఇంటర్మీడియట్ పాయింట్లను సృష్టించవచ్చు:
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 లక్షణాలకు హామీ ఇస్తాయి:
- Atomicity — అన్నీ లేదా ఏమీ;
- C నిలకడ — పరిమితులు లావాదేవీ ప్రారంభంలో మరియు ముగింపులో సంతృప్తి చెందుతాయి;
- నేనుసొలేషన్ — ఏకకాలిక లావాదేవీలు ఇంటర్మీడియట్ స్థితులను చూడవు (వివిధ "స్థాయిలలో");
- Durability — ఒక విజయవంతమైన
COMMITక్రాష్ అయినప్పుడు కూడా కోల్పోలేదు.
మీ వంతు
ఒకే లావాదేవీలో: ఉత్పత్తి 1 స్టాక్లో 1 తగ్గింపు మరియు ఉత్పత్తి యొక్క స్టాక్ను 1 ద్వారా పెంచండి 2. BEGINతో తెరిచి, COMMITతో మూసివేయండి.
సూచనను చూపించు
సంబంధిత SET నిబంధనలలో రిఫరెన్స్ స్టాక్ - 1 మరియు స్టాక్ + 1.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
వ్యాయామం సమీక్షించండి
లావాదేవీని తెరవండి, కస్టమర్ యొక్క నగరాన్ని id=1తో 'Sperimentale'కి నవీకరించడానికి ప్రయత్నించండి, ఆపై ROLLBACKతో ఆపరేషన్ను రద్దు చేయండి. ముగింపులో కస్టమర్ 1 నగరం తప్పనిసరిగా అసలైనది ('మిలానో') అయి ఉండాలి.
సూచనను చూపించు
ROLLBACK BEGIN నుండి చేసిన ప్రతి మార్పును రద్దు చేస్తుంది.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది