Förberedelser inför SQL-intervjun · Lektion

ACID-egenskaper förklarade

Atomicitet, konsistens, isolering och beständighet med konkreta exempel.

Lektion 1 av 413 steg

ACID-egenskaper förklarade är en gratis lektion i Förberedelser inför SQL-intervjun på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Förberedelser inför SQL-intervjun, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Förberedelser inför SQL-intervjun innehåller totalt 4 lektioner.

Varför intervjuare frågar om ACID

När en seniorintervjuare säger ”förklara ACID för mig” testar de inte om du har memorerat fyra ord. De vill veta om du förstår vad en databas garanterar när många användare använder den samtidigt.

ACID står för atomicitet, konsistens, isolering och varaktighet. Varje transaktionsdatabas (Postgres, MySQL/InnoDB, SQL Server, Oracle) utlovar dessa fyra egenskaper för arbete som utförs inom en transaktion.

De bästa svaren kopplar varje bokstav till ett konkret fel som den förhindrar. Under de kommande avsnitten gör vi precis det.

Vad är en transaktion?

En transaktion är en arbetsenhet som databasen behandlar som ett enda, odelbart steg. Ni öppnar den med BEGIN, kör ett eller flera uttryck och använder sedan antingen COMMIT för att göra ändringarna permanenta eller ROLLBACK för att kasta allt.

Det klassiska exemplet är en banköverföring: debitera ett konto och kreditera ett annat. Båda måste genomföras, eller inget av dem. Transaktionen är den omslutande enhet som gör det möjligt att garantera detta.

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

A = Atomicitet

Atomicitet innebär att en transaktion genomförs helt eller inte alls. Om något uttryck misslyckas eller servern kraschar mitt under körningen återställs alla ändringar i transaktionen, som om den aldrig hade påbörjats.

I överföringsexemplet innebär atomicitet att debiteringen också återställs om krediteringen misslyckas efter att debiteringen har lyckats. Ni förlorar aldrig pengar på grund av en ofullständigt genomförd operation.

Formulering vid intervju: "Atomicitet säkerställer att transaktionen committas som en helhet eller inte alls, så att inget delvis uppdaterat tillstånd lämnas kvar."

Atomicitet i praktiken

Här bryter den andra uppdateringen mot en CHECK-begränsning (saldot får inte bli negativt). Databasen avbryter transaktionen, och ROLLBACK återställer även den första uppdateringen.

Det viktiga vid intervjuer är att konto 1 fortfarande har sitt ursprungliga saldo efter återställningen. Det finns ingen delvis genomförd skrivning kvar 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 innebär att en transaktion flyttar databasen från ett giltigt tillstånd till ett annat giltigt tillstånd. Varje committad transaktion måste följa alla definierade regler: begränsningar, främmande nycklar, triggers och kaskader.

Om en transaktion skulle lämna en begränsning bruten (en övergiven främmande nyckel, en duplicerad primärnyckel eller en misslyckad CHECK), vägrar databasen att committa den.

Viktig nyans: databasen upprätthåller deklarerade regler, men invarianter på applikationsnivå ("en användare får ha högst tre aktiva sessioner") är ert ansvar om de inte har modellerats som begränsningar.

Konsistens som upprätthålls av begränsningar

Konsistens är till stor del summan av reglerna i ert schema. Nedan garanterar en främmande nyckel att ni aldrig kan lägga in en order för en kund som inte finns.

Om insättningen refererar till en saknad kund misslyckas transaktionen, atomicitet återställer den och konsistensen bevaras. Därför säger intervjuare att atomicitet och konsistens samverkar.

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 = Isolering

Isolering innebär att samtidiga transaktioner inte stör varandra. Idealt beter sig varje transaktion som om den kördes ensam, även när dussintals transaktioner körs samtidigt.

I praktiken erbjuder databaser olika isoleringsnivåer som väger striktare regler mot prestanda. Svagare nivåer tillåter vissa anomalier (smutsiga läsningar och fantomläsningar) i utbyte mot högre samtidighet.

Det här är den mest innehållsrika delen av en ACID-intervju, så de två följande lektionerna behandlar isoleringsnivåer och läsanomalier på djupet.

Varför isolering är en skala

Perfekt isolering (SERIALIZABLE) är kostsam eftersom den måste förhindra alla möjliga konflikter mellan sammanflätade körningar, ofta genom att låsa eller avbryta transaktioner.

Därför definierar SQL-standarden fyra nivåer. En vanlig intervjufälla är att kandidater antar att isolering är binär. Det är den inte. Ni väljer uttryckligen hur mycket isolering ni vill ha.

  • READ UNCOMMITTED svagast
  • READ COMMITTED
  • REPEATABLE READ
  • SERIALIZABLE starkast
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT SUM(balance) FROM accounts;
-- ... business logic ...
COMMIT;

D = Varaktighet

Varaktighet innebär att ändringar överlever krascher, strömavbrott och omstarter när en transaktion väl har committats. En committad transaktion finns på beständig lagring.

Databaser uppnår detta med en write-ahead-logg (WAL): ändringar skrivs till en beständig logg innan datafilerna uppdateras. Vid en omstart spelar motorn upp loggen för att återställa committat arbete som ännu inte hade skrivits till huvudfilerna.

Formulering vid intervju: "Varaktighet garanteras av WAL; COMMIT returnerar först när loggposten har skrivits till disk."

Att sätta ihop banköverföringen

En enda överföring demonstrerar alla fyra egenskaper samtidigt:

  • Atomicitet: båda uppdateringarna genomförs eller ingen av dem.
  • Konsistens: en CHECK ser till att saldon inte blir negativa.
  • Isolering: en samtidig läsare ser inte en halvt genomförd överföring.
  • Varaktighet: efter COMMIT överlever de nya saldona en krasch.

Att kunna koppla ett enda exempel till alla fyra bokstäver är precis det som ger poäng på intervjun.

BEGIN;
UPDATE accounts SET balance = balance - 100
  WHERE id = 1 AND balance >= 100;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

Vanliga följdfrågor

Intervjuare undersöker ofta gränsfallen. Var beredd på följande:

  • "Vilken egenskap upprätthålls av en främmande nyckel?" Konsistens.
  • "Vad skyddar er mot en serverkrasch mitt under en transaktion?" Atomicitet (återställning av ej committade ändringar) plus varaktighet (återuppspelning av committade ändringar).
  • "Är isolering kostnadsfri?" Nej, starkare isolering kostar samtidighet.
  • "Ger NoSQL-datalager ACID?" Många byter bort det mot tillgänglighet (BASE); säg att det beror på motorn.

Snabbtest

Testa hur väl ni förstår vad de olika ACID-egenskaperna gör.

Sammanfattning: ACID i ett andetag

Nu kan ni besvara frågan tydligt:

  • Atomicitet – allt eller inget; delvis genomfört arbete återställs.
  • Konsistens – varje commit följer begränsningarna och lämnar databasen i ett giltigt tillstånd.
  • Isolering – samtidiga transaktioner förstör inte varandra; graden av strikthet kan justeras.
  • Varaktighet – committade data överlever krascher, med stöd av write-ahead-loggen.

Koppla varje bokstav till ett konkret fel som egenskapen förhindrar, så klarar ni inledningen av nästan vilken intervju om samtidighet som helst.

Gratis att börja

Lär dig SQL med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”ACID-egenskaper förklarade” gratis?

Ja – hela texten till ”ACID-egenskaper förklarade” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Förberedelser inför SQL-intervjun, kan Ni uppgradera till CoddyKit PRO. Kursen i Förberedelser inför SQL-intervjun innehåller totalt 4 lektioner.

Vad lär jag mig i ”ACID-egenskaper förklarade”?

Atomicitet, konsistens, isolering och beständighet med konkreta exempel. Ni övar på Förberedelser inför SQL-intervjun med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Förberedelser inför SQL-intervjun?

Du behöver inga förkunskaper. Utbildningen i Förberedelser inför SQL-intervjun på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”ACID-egenskaper förklarade”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Förberedelser inför SQL-intervjun-lektionen?

Ja. Varje Förberedelser inför SQL-intervjun-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. ACID-egenskaper förklarade
  2. De fyra isoleringsnivåerna
  3. Smutsiga, icke-repeterbara och fantomläsningar
  4. Dödlägen, låsning och MVCC
← Tillbaka till Förberedelser inför SQL-intervjun