தொகுதி பாடங்கள் (1/4)
ACID பரிவர்த்தனைகள் (BEGIN/COMMIT)
எந்தவொரு தரவுத்தளத்திற்கும் நம்பகத்தன்மையின் அடித்தளம் ACID சுருக்கத்தில் உள்ளது:
- Aடொமிசிட்டி: ஒரு செயல்பாடு முழுவதுமாக முடிவடைகிறது (உறுதியானது), அல்லது அரைகுறையான தடயங்களை விட்டுவிடாமல் தோல்வியடைகிறது (ரோல்பேக்).
- C நிலைத்தன்மை: தரவுத்தள விதிகள் (எ.கா. கட்டுப்பாடுகள், வெளிநாட்டு விசைகள்) எப்போதும் மதிக்கப்படும்.
- நான் தீர்வு: ஒரே நேரத்தில் நடக்கும் பரிவர்த்தனைகள் ஒன்றுக்கொன்று கட்டுப்பாடற்ற வழிகளில் தலையிடாது.
- Durability: ஒரு உறுதிப்பாட்டிற்குப் பிறகு, மாற்றம் மீளமுடியாமல் வட்டில் எழுதப்படும்.
பரிவர்த்தனை தொடரியல்
பொதுவாக ஒவ்வொரு புதுப்பிப்பு அல்லது DELETE வினவல் ஒரு முழுமையான பரிவர்த்தனையாக (தானியங்கி) கருதப்படுகிறது. ஆனால் நீங்கள் பல செயல்பாடுகளை ஒன்றாகக் குழுவாக்க விரும்பினால், உதாரணமாக வாடிக்கையாளரின் கணக்கில் டெபிட் செய்வது மற்றும் ஆர்டரை வைப்பது, நீங்கள் அதை வெளிப்படையாக பரிவர்த்தனை தொடரியல் மூலம் செய்ய வேண்டும்.
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
INSERT INTO orders (user_id, total) VALUES (1, 100);
COMMIT; -- Writes the changesஇந்த சிக்கலான செயல்பாட்டின் போது, வினவலை அனுப்பிய ஜாவாஸ்கிரிப்ட் செயலி ஒரு சிக்கல் இருப்பதை உணர்ந்தால் (உதாரணமாக, கிடங்கில் போதுமான அளவு இருப்பு இல்லை மற்றும் அது செயலிழந்தால்), அது அனுப்பும்:
ROLLBACK; -- Cancels the changes and discards the 2 queries sent in the blockநீங்களே முயற்சி செய்து பாருங்கள்
பரிவர்த்தனையைத் திறக்கவும்.\nஐடி 10ஐக் கொண்டு தயாரிப்பை அதன் 'அளவை' தற்காலிக அட்டவணையில் 0 என அமைக்கவும் (காத்திருக்க வேண்டாம், தயாரிப்புகளில் 'அளவு' இல்லை, கண்டுபிடிப்போம்: 'order_items' இல் 'unit_price' ஐ மாற்றவும், ஆனால் அதற்கு ஒரு கட்டுப்பாடு தேவை.\nஇதைச் சிறப்பாகச் செய்வோம்: ஐடியை வெற்றிகரமாக ஆர்டர் செய்து முடிக்க ஐடியின் நிலையை மேம்படுத்தவும்.
குறிப்பைக் காட்டு
BEGIN; உடன் தொடங்கவும், ஐடி = 5 க்கான ஆர்டர்களை நிலை='ஷிப்டு' என மாற்றவும், பின்னர் அதை COMMIT உடன் அனுப்பவும்;
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
உற்பத்தியில் பீதி! ஒரு டெவ், WHERE இல்லாமல் ஒரு DELETE எழுதினார், வரலாற்று ரீதியாக அனைத்து மதிப்புரைகளையும் துடைத்தார்.\nரோல்பேக் எப்படி செய்யப்படுகிறது என்பதை அவர்களுக்குக் காண்பிப்போம். ஒரு பரிவர்த்தனையைத் தொடங்கவும், 'விமர்சனங்கள்' (WHERE பிரிவு இல்லாமல்) அனைத்தையும் அழிக்கும் விரைவான நீக்குதலைத் தொடங்கவும், ஆனால் SQL லைஃப்சேவரைப் பயன்படுத்தி தடுப்பை முடிக்கும் முன் பாதிப்பைச் செயல்தவிர்க்கவும்.
குறிப்பைக் காட்டு
BEGIN;, 'விமர்சனங்களில்' சுத்தமான ஸ்லேட் நீக்கம், பின்னர் மேஜிக் ROLLBACK; முடிவில்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்