ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 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 స్టాక్‌ను దాని అసలు విలువకు పునరుద్ధరిస్తుంది.

ROLLBACK: DBA యొక్క డీబగ్గర్

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 — డేటాబేస్ సరిగ్గా ఇలాగే ఉంటుంది అది ముందు ఉంది.

SAVEPOINT: పాక్షిక రోల్‌బ్యాక్

లావాదేవీ లోపల మీరు ఇంటర్మీడియట్ పాయింట్లను సృష్టించవచ్చు:

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 లక్షణాలకు హామీ ఇస్తాయి:

  • Atomicity — అన్నీ లేదా ఏమీ;
  • C నిలకడ — పరిమితులు లావాదేవీ ప్రారంభంలో మరియు ముగింపులో సంతృప్తి చెందుతాయి;
  • నేనుసొలేషన్ — ఏకకాలిక లావాదేవీలు ఇంటర్మీడియట్ స్థితులను చూడవు (వివిధ "స్థాయిలలో");
  • Durability — ఒక విజయవంతమైన COMMIT క్రాష్ అయినప్పుడు కూడా కోల్పోలేదు.

మీ వంతు

వ్యాయామం#sql.m8.l4.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

ఒకే లావాదేవీలో: ఉత్పత్తి 1 స్టాక్‌లో 1 తగ్గింపు మరియు ఉత్పత్తి యొక్క స్టాక్‌ను 1 ద్వారా పెంచండి 2. BEGINతో తెరిచి, COMMITతో మూసివేయండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

సంబంధిత SET నిబంధనలలో రిఫరెన్స్ స్టాక్ - 1 మరియు స్టాక్ + 1.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం సమీక్షించండి

వ్యాయామం#sql.m8.l4.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

లావాదేవీని తెరవండి, కస్టమర్ యొక్క నగరాన్ని id=1తో 'Sperimentale'కి నవీకరించడానికి ప్రయత్నించండి, ఆపై ROLLBACKతో ఆపరేషన్‌ను రద్దు చేయండి. ముగింపులో కస్టమర్ 1 నగరం తప్పనిసరిగా అసలైనది ('మిలానో') అయి ఉండాలి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

ROLLBACK BEGIN నుండి చేసిన ప్రతి మార్పును రద్దు చేస్తుంది.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది