ACID-egenskaber forklaret
Atomicitet, konsistens, isolation og holdbarhed med konkrete eksempler.
ACID-egenskaber forklaret er en gratis Forberedelse til kodeinterviews-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Forberedelse til kodeinterviews, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.
Hvorfor interviewere spørger om ACID
Når en seniorinterviewer siger »gennemgå ACID for mig«, tester vedkommende ikke, om du har lært fire ord udenad. Intervieweren vil vide, om du forstår, hvad en database garanterer, når mange brugere tilgår den samtidig.
ACID står for atomaritet, konsistens, isolation og durabilitet. Alle transaktionsdatabaser (Postgres, MySQL/InnoDB, SQL Server og Oracle) lover disse fire egenskaber for arbejde, der udføres i en transaktion.
De stærkeste svar forbinder hvert bogstav med en konkret fejl, som egenskaben forhindrer. Det gør vi præcis i de næste scener.
Hvad er en transaktion?
En transaktion er en arbejdsenhed, som databasen behandler som ét enkelt, udeleligt trin. Du åbner den med BEGIN, udfører en eller flere SQL-sætninger og bruger derefter enten COMMIT til at gøre ændringerne permanente eller ROLLBACK til at kassere det hele.
Det klassiske eksempel er en bankoverførsel: Træk beløbet fra én konto, og indsæt det på en anden. Begge dele skal ske, ellers skal ingen af dem ske. Transaktionen er den ramme, der gør dette løfte muligt.
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;A = Atomaritet
Atomaritet betyder, at en transaktion er alt eller intet. Hvis en SQL-sætning mislykkes, eller serveren går ned undervejs, rulles alle ændringer i transaktionen tilbage, som om den aldrig var startet.
I eksemplet med overførslen garanterer atomariteten, at debiteringen også bliver fortrudt, hvis indsættelsen på den anden konto mislykkes efter debiteringen. Du mister aldrig penge på grund af en halvt gennemført handling.
Formulering til jobsamtalen: "Atomaritet sikrer, at transaktionen gennemføres som en helhed eller slet ikke, så der ikke efterlades en delvis tilstand."
Atomaritet i praksis
Her overtræder den anden opdatering en CHECK-begrænsning (saldoen må ikke blive negativ). Databasen afbryder transaktionen, og ROLLBACK fortryder også den første opdatering.
Det centrale i jobsamtaler er: Efter tilbageførslen har konto 1 stadig sin oprindelige saldo. Der ligger ingen delvis skrivning i tabellen.
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- next line fails: balance would go below 0
UPDATE accounts SET balance = balance - 999999 WHERE id = 2;
ROLLBACK; -- account 1 is restored to its original balanceC = Konsistens
Konsistens betyder, at en transaktion flytter databasen fra én gyldig tilstand til en anden gyldig tilstand. Alle gennemførte transaktioner skal overholde alle definerede regler: begrænsninger, fremmednøgler, triggere og kaskader.
Hvis en transaktion ville efterlade en overtrådt begrænsning (en fremmednøgle uden en tilsvarende række, en duplikeret primærnøgle eller en mislykket CHECK), nægter databasen at gennemføre den.
Nuance, der bør nævnes: Databasen håndhæver de erklærede regler, men invarianter på applikationsniveau ("en bruger må højst have 3 aktive sessioner") er dit ansvar, medmindre de er modelleret som begrænsninger.
Konsistens håndhævet af begrænsninger
Konsistens er for det meste summen af dine skemaregler. Herunder garanterer en fremmednøgle, at du aldrig kan indsætte en ordre for en kunde, der ikke findes.
Hvis indsættelsen henviser til en manglende kunde, mislykkes transaktionen, atomariteten ruller den tilbage, og konsistensen bevares. Det er derfor, man i jobsamtaler siger, at atomaritet og konsistens arbejder sammen.
CREATE TABLE orders (
id INT PRIMARY KEY,
customer_id INT NOT NULL REFERENCES customers(id),
amount NUMERIC(10,2) CHECK (amount > 0)
);
-- This fails if customer 999 does not exist, keeping data consistent
INSERT INTO orders (id, customer_id, amount) VALUES (1, 999, 50.00);I = Isolation
Isolation betyder, at samtidige transaktioner ikke træder hinanden over tæerne. Ideelt set opfører hver transaktion sig, som om den kørte alene, selv når snesevis kører på samme tid.
I praksis tilbyder databaser forskellige isolationsniveauer, som afvejer strenghed mod ydeevne. Svagere niveauer tillader bestemte anomalier (beskidte læsninger og fantomlæsninger) til gengæld for højere samtidighed.
Dette er den mest omfattende del af enhver jobsamtale om ACID, så de næste to lektioner gennemgår isolationsniveauer og læseanomalier i dybden.
Hvorfor isolation er et spektrum
Perfekt isolation (SERIALIZABLE) er dyrt, fordi den skal forhindre alle mulige konflikter mellem samtidige rækkefølger, ofte ved at låse eller afbryde transaktioner.
Derfor definerer SQL-standarden fire niveauer. En almindelig fælde i jobsamtaler er, at kandidater antager, at isolation er et enten-eller. Det er den ikke. Du vælger udtrykkeligt, hvor meget isolation du ønsker.
READ UNCOMMITTEDsvagestREAD COMMITTEDREPEATABLE READSERIALIZABLEstærkest
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT SUM(balance) FROM accounts;
-- ... business logic ...
COMMIT;D = Holdbarhed
Holdbarhed betyder, at ændringerne i en transaktion overlever nedbrud, strømsvigt og genstarter, når transaktionen først er gennemført. En gennemført transaktion ligger på stabil lagring.
Databaser opnår dette med en log med forhåndsskrivning (WAL): Ændringerne skrives til en holdbar log før datafilerne opdateres. Ved genstart afspiller databasemotoren loggen igen for at gendanne gennemført arbejde, som endnu ikke var nået frem til hovedfilerne.
Formulering til jobsamtalen: "Holdbarhed garanteres af WAL; COMMIT returnerer først, når logposten er skrevet til disken."
Sådan hænger bankoverførslen sammen
Én overførsel aktiverer alle fire egenskaber på én gang:
- Atomaritet: Begge opdateringer gennemføres, eller ingen af dem gør.
- Konsistens: En CHECK sikrer, at saldi ikke bliver negative.
- Isolation: En samtidig læser kan ikke se en halvt gennemført overførsel.
- Holdbarhed: Efter
COMMIToverlever de nye saldi et nedbrud.
At kunne knytte ét eksempel til alle fire bogstaver er præcis det, der giver point i jobsamtalen.
BEGIN;
UPDATE accounts SET balance = balance - 100
WHERE id = 1 AND balance >= 100;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;Almindelige opfølgende spørgsmål
Til jobsamtaler undersøger man ofte grænsetilfældene. Vær klar til disse spørgsmål:
- "Hvilken egenskab håndhæves af en fremmednøgle?" Konsistens.
- "Hvad beskytter dig mod et servernedbrud midt i en transaktion?" Atomaritet (tilbageførsel af ikke-gennemførte ændringer) plus holdbarhed (afspilning af gennemførte ændringer).
- "Er isolation gratis?" Nej, stærkere isolation koster samtidighed.
- "Giver NoSQL-databaser ACID?" Mange bytter det for tilgængelighed (BASE); sig, at det afhænger af databasemotoren.
Hurtigt tjek
Test din forståelse af, hvad de enkelte ACID-egenskaber gør.
Opsummering: ACID kort fortalt
Du kan nu svare klart på spørgsmålet:
- Atomaritet – alt eller intet; delvist arbejde rulles tilbage.
- Konsistens – enhver COMMIT respekterer begrænsningerne og efterlader en gyldig tilstand.
- Isolation – samtidige transaktioner ødelægger ikke hinanden; strengheden kan justeres.
- Holdbarhed – gennemførte data overlever nedbrud takket være loggen med forhåndsskrivning.
Knyt hvert bogstav til en konkret fejl, det forhindrer, så kommer du sikkert gennem begyndelsen af enhver jobsamtale om samtidighed.
Lær Forberedelse til kodeinterviews med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 90
- Lektioner
- 360
Ofte stillede spørgsmål
Er lektionen “ACID-egenskaber forklaret” gratis?
Ja — hele teksten til “ACID-egenskaber forklaret” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Forberedelse til kodeinterviews-kurset, skal du opgradere til CoddyKit PRO. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “ACID-egenskaber forklaret”?
Atomicitet, konsistens, isolation og holdbarhed med konkrete eksempler. Du øver dig i Forberedelse til kodeinterviews med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Forberedelse til kodeinterviews?
Der kræves ingen tidligere erfaring. Forberedelse til kodeinterviews på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “ACID-egenskaber forklaret”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Forberedelse til kodeinterviews-lektion?
Ja. Alle Forberedelse til kodeinterviews-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- ACID-egenskaber forklaret
- De fire isolationsniveauer
- Dirty reads, non-repeatable reads og phantom reads
- Deadlocks, låsning og MVCC