ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 11 · 4లో పాఠం 1కోర్సులో 41/57~15 min
మాడ్యూల్ పాఠాలు (1/4)

ACID లావాదేవీలు (BEGIN/COMMIT)

ఏదైనా డేటాబేస్ విశ్వసనీయత యొక్క పునాదులు ACID ఎక్రోనిం మీద ఆధారపడి ఉంటాయి:

  • Atomicity: ఒక ఆపరేషన్ పూర్తిగా పూర్తవుతుంది (కమిట్), లేదా విఫలమైతే సగం పూర్తయిన జాడలు ఉండవు (రోల్‌బ్యాక్).
  • C నిలకడ: డేటాబేస్ నియమాలు (ఉదా. పరిమితులు, విదేశీ కీలు) ఎల్లప్పుడూ గౌరవించబడతాయి.
  • నేనుసొలేషన్: ఒకే సమయంలో జరిగే లావాదేవీలు అనియంత్రిత మార్గాల్లో ఒకదానితో ఒకటి జోక్యం చేసుకోవు.
  • D యురబిలిటీ: కమిట్ తర్వాత, మార్పు తిరిగి పొందలేని విధంగా డిస్క్‌కి వ్రాయబడుతుంది.

లావాదేవీ సింటాక్స్

సాధారణంగా ప్రతి ఒక్క UPDATE లేదా 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

ఈ సంక్లిష్టమైన అమలు సమయంలో ప్రశ్నను పంపిన JavaScript యాప్ సమస్య ఉందని గుర్తిస్తే (ఉదాహరణకు గిడ్డంగిలో తగినంత స్టాక్ లేదు మరియు అది క్రాష్ అవుతుంది), ఇది పంపుతుంది:

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

మీరే ప్రయత్నించండి

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

లావాదేవీని తెరవండి.\nతాత్కాలిక పట్టికలో ID 10తో ఉత్పత్తిని దాని 'పరిమాణం'ని 0కి సెట్ చేయండి (ఆగవద్దు, 'పరిమాణం' ఉత్పత్తులపై లేదు, కనిపెట్టుదాం: 'order_items'లో 'unit_price'ని మార్చండి, కానీ దానికి ఒక ప్రతిబంధకం అవసరం.\nమనం మరింత మెరుగ్గా చేద్దాం: లావాదేవీని విజయవంతంగా పూర్తి చేయండి. 'ఆర్డర్ ID' స్థితిని విజయవంతంగా పూర్తి చేయండి.

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

BEGIN;తో ప్రారంభించండి, id = 5 కోసం ఆర్డర్‌లను స్థితి='షిప్‌డ్'కి మార్చండి, ఆపై COMMITతో పంపండి;

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

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

ఉత్పత్తిలో భయాందోళన! ఒక దేవ్ ఎక్కడ లేకుండా DELETE వ్రాసాడు, చారిత్రాత్మకంగా అన్ని సమీక్షలను తుడిచిపెట్టాడు.\nరోల్‌బ్యాక్ ఎలా జరుగుతుందో వారికి చూపిద్దాం. లావాదేవీని ప్రారంభించండి, 'సమీక్షలు' (WHERE నిబంధన లేకుండా) నుండి అన్నింటినీ తుడిచిపెట్టే త్వరిత తొలగింపును తొలగించండి, కానీ బ్లాక్‌ను పూర్తి చేయడానికి ముందు ప్రభావాన్ని చర్యరద్దు చేయడానికి SQL లైఫ్‌సేవర్‌ని ఉపయోగించండి.

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

BEGIN;, 'సమీక్షలు'పై క్లీన్-స్లేట్ తొలగింపు, ఆపై మ్యాజిక్ ROLLBACK; ముగింపులో.

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