Forberedelse til SQL-intervju · leksjon

ACID-egenskapene forklart

Atomicitet, konsistens, isolasjon og varighet med konkrete eksempler.

Leksjon 1 av 413 trinn

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 balance

C = 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 UNCOMMITTED svakest
  • READ COMMITTED
  • REPEATABLE READ
  • SERIALIZABLE sterkest
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.

Gratis å komme i gang

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

  1. ACID-egenskapene forklart
  2. De fire isolasjonsnivåene
  3. Skitne, ikke-gjentakbare og fantomlesninger
  4. Deadlocker, låsing og MVCC
← Tilbake til Forberedelse til SQL-intervju