ACID-egenskapene forklart
Atomicitet, konsistens, isolasjon og varighet med konkrete eksempler.
ACID-egenskapene forklart er en gratis leksjon i Forberedelse til SQL-intervju på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Forberedelse til SQL-intervju, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Forberedelse til SQL-intervju inneholder totalt 4 leksjoner.
Hvorfor intervjuere spør om ACID
Når en seniorintervjuer sier «Forklar meg ACID», tester vedkommende ikke om du har pugget fire ord. Intervjueren vil vite om du forstår hva en database garanterer når mange brukere arbeider mot den samtidig.
ACID står for atomisitet, konsistens, isolasjon og varighet. Alle transaksjonsdatabaser (Postgres, MySQL/InnoDB, SQL Server, Oracle) garanterer disse fire egenskapene for arbeid som utføres i en transaksjon.
De beste svarene knytter hver bokstav til en konkret feiltilstand den forhindrer. I de neste scenene gjør vi nettopp det.
Hva er en transaksjon?
En transaksjon er en arbeidsenhet som databasen behandler som ett enkelt, udelelig trinn. De åpner den med BEGIN, utfører én eller flere setninger og bruker deretter enten COMMIT for å gjøre endringene permanente eller ROLLBACK for å forkaste alt.
Det klassiske eksempelet er en bankoverføring: én konto debiteres, og en annen krediteres. Begge deler må skje, ellers skal ingen av dem skje. En transaksjon er rammen som gjør det mulig å garantere dette.
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;A = Atomicitet
Atomicitet betyr at en transaksjon enten gjennomføres i sin helhet eller ikke i det hele tatt. Hvis en setning mislykkes, eller serveren krasjer underveis, rulles alle endringer i transaksjonen tilbake som om den aldri hadde startet.
I eksempelet med overføringen garanterer atomicitet at debiteringen også blir reversert hvis krediteringen mislykkes etter at debiteringen er gjennomført. De mister aldri penger på grunn av en halvferdig operasjon.
Formulering i intervju: "Atomicitet sikrer at transaksjonen committes som en helhet eller ikke i det hele tatt, slik at det ikke finnes noen delvis tilstand."
Atomicitet i praksis
Her bryter den andre oppdateringen med en CHECK-constraint (saldoen kan ikke bli negativ). Databasen avbryter transaksjonen, og ROLLBACK ruller også tilbake den første oppdateringen.
Det viktige poenget i intervjuer er at konto 1 fortsatt har sin opprinnelige saldo etter tilbakerullingen. Det finnes ingen delvis skriving 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 betyr at en transaksjon flytter databasen fra én gyldig tilstand til en annen gyldig tilstand. Alle committede transaksjoner må overholde alle definerte regler: constraints, fremmednøkler, triggere og kaskader.
Hvis en transaksjon ville etterlate en brutt constraint (en foreldreløs fremmednøkkel, en duplikat primærnøkkel eller en mislykket CHECK), nekter databasen å committe den.
En viktig nyanse: Databasen håndhever deklarerte regler, men invarianter på applikasjonsnivå ("en bruker kan ha maksimalt tre aktive økter") er Deres ansvar med mindre de er modellert som constraints.
Konsistens håndhevet av constraints
Konsistens er i stor grad summen av skjemareglene Deres. Nedenfor garanterer en fremmednøkkel at De aldri kan sette inn en ordre for en kunde som ikke finnes.
Hvis innsettingen refererer til en manglende kunde, mislykkes transaksjonen, atomicitet ruller den tilbake, og konsistensen bevares. Derfor sier intervjuere at atomicitet og konsistens virker 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 = Isolasjon
Isolasjon betyr at samtidige transaksjoner ikke forstyrrer hverandre. Ideelt sett oppfører hver transaksjon seg som om den kjørte alene, selv når dusinvis av transaksjoner kjører samtidig.
I praksis tilbyr databaser ulike isolasjonsnivåer som avveier strenghet mot ytelse. Svakere nivåer tillater enkelte anomalier (skitne lesinger og fantomlesinger) i bytte mot høyere samtidighet.
Dette er den mest omfattende delen av ethvert ACID-intervju, så de to neste leksjonene går grundig gjennom isolasjonsnivåer og leseanomalier.
Hvorfor isolasjon er en skala
Perfekt isolasjon (SERIALIZABLE) er kostbart fordi det må forhindre alle mulige konflikter mellom samtidige operasjoner, ofte ved å låse eller avbryte transaksjoner.
Derfor definerer SQL-standarden fire nivåer. En vanlig intervjufelle er at kandidater antar at isolasjon er binær. Det er den ikke. De velger uttrykkelig hvor mye isolasjon De ønsker.
READ UNCOMMITTEDsvakestREAD COMMITTEDREPEATABLE READSERIALIZABLEsterkest
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT SUM(balance) FROM accounts;
-- ... business logic ...
COMMIT;D = Varighet
Varighet betyr at endringene i en transaksjon overlever krasj, strømbrudd og omstarter så snart transaksjonen er committet. En committet transaksjon ligger på stabil lagring.
Databaser oppnår dette med en write-ahead-logg (WAL): Endringene skrives til en varig logg før datafilene oppdateres. Ved omstart spiller databasemotoren av loggen for å gjenopprette committet arbeid som ennå ikke var skrevet til hovedfilene.
Formulering i intervju: "Varighet garanteres av WAL-en; commit returnerer først etter at loggposten er tømt til disken."
Slik henger bankoverføringen sammen
Én overføring demonstrerer alle fire egenskapene samtidig:
- Atomicitet: Begge oppdateringene gjennomføres, eller ingen av dem gjør det.
- Konsistens: En CHECK hindrer at saldoer blir negative.
- Isolasjon: En samtidig leser ser ikke en halvferdig overføring.
- Varighet: Etter COMMIT overlever de nye saldoene et krasj.
Å kunne knytte ett enkelt eksempel til alle fire bokstavene er akkurat det som gir poeng i intervjuet.
BEGIN;
UPDATE accounts SET balance = balance - 100
WHERE id = 1 AND balance >= 100;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;Vanlige oppfølgingsspørsmål
Intervjuere undersøker ofte grensetilfellene. Vær forberedt på følgende:
- "Hvilken egenskap håndheves av en fremmednøkkel?" Konsistens.
- "Hva beskytter Dem mot et serverkrasj midt i en transaksjon?" Atomicitet (tilbakerulling av ikke-committede endringer) pluss varighet (avspilling av committede endringer).
- "Er isolasjon gratis?" Nei, sterkere isolasjon koster samtidighet.
- "Gir NoSQL-databaser ACID?" Mange bytter det mot tilgjengelighet (BASE); si at det avhenger av databasemotoren.
Kort kontroll
Test forståelsen Deres av hva de ulike ACID-egenskapene gjør.
Oppsummering: ACID i korte trekk
Nå kan De svare klart på spørsmålet:
- Atomicitet – alt eller ingenting; delvis arbeid rulles tilbake.
- Konsistens – hver commit overholder constraints og etterlater en gyldig tilstand.
- Isolasjon – samtidige transaksjoner ødelegger ikke hverandre; graden av strenghet kan justeres.
- Varighet – committede data overlever krasj, støttet av write-ahead-loggen.
Knytt hver bokstav til en konkret feil den forhindrer, så kommer De enkelt gjennom innledningen til ethvert intervju om samtidighet.
Lær deg SQL med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 30
- Leksjoner
- 120
Ofte stilte spørsmål
Er leksjonen «ACID-egenskapene forklart» gratis?
Ja – hele teksten i «ACID-egenskapene forklart» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Forberedelse til SQL-intervju-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Forberedelse til SQL-intervju inneholder totalt 4 leksjoner.
Hva lærer jeg i «ACID-egenskapene forklart»?
Atomicitet, konsistens, isolasjon og varighet med konkrete eksempler. Du øver på Forberedelse til SQL-intervju med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Forberedelse til SQL-intervju?
Ingen tidligere erfaring er nødvendig. Forberedelse til SQL-intervju på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «ACID-egenskapene forklart»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Forberedelse til SQL-intervju-leksjonen?
Ja. Alle Forberedelse til SQL-intervju-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- ACID-egenskapene forklart
- De fire isolasjonsnivåene
- Skitne, ikke-gjentakbare og fantomlesninger
- Deadlocker, låsing og MVCC