Spring til indhold
Academi.dk

SQL

Transaktioner

Øvet DA↔EN-ordliste

En transaktion samler flere ændringer til én, der enten gennemføres helt eller slet ikke. Du starter den, laver dine ændringer, og afslutter med commit hvis alt gik godt, eller rollback hvis noget fejlede. Det er sådan du undgår halvfærdige ændringer i databasen.

Forudsætter, at du har set insert, update og delete .

Problemet: to ændringer, der hører sammen

En overførsel består af to skridt: træk fra den ene konto, læg til den anden.

UPDATE konto SET saldo = saldo - 500 WHERE id = 1;
UPDATE konto SET saldo = saldo + 500 WHERE id = 2;

Går strømmen mellem de to linjer, er pengene væk. Databasen har ingen måde at vide, at de to linjer hørte sammen, medmindre du siger det.

BEGIN TRANSACTION;

UPDATE konto SET saldo = saldo - 500 WHERE id = 1;
UPDATE konto SET saldo = saldo + 500 WHERE id = 2;

COMMIT;

Nu er de to ændringer én. Enten sker de begge, eller også sker ingen af dem.

commit og rollback

  • COMMIT. Gennemfør. Ændringerne bliver permanente og synlige for andre.
  • ROLLBACK. Fortryd alt siden BEGIN. Som om det aldrig var sket.

I backendkode ser det typisk sådan ud:

start transaktion
try {
    træk fra konto A
    læg til konto B
    commit
} catch {
    rollback
    svar med en fejl
}

Det er samme mønster som try/catch i asynkron JavaScript, og det er ikke tilfældigt: begge dele handler om at have en plan for, at noget går galt undervejs.

ACID

De fire bogstaver er det, der forventes af en database, og de bliver ofte spurgt om:

  • Atomicity, alt eller intet.
  • Consistency, databasen går fra én gyldig tilstand til en anden. Reglerne om nøgler og begrænsninger holder.
  • Isolation, samtidige transaktioner forstyrrer ikke hinanden.
  • Durability, når der er committet, holder det, også hvis strømmen går.

Kan du give ét konkret eksempel på hvert bogstav, gerne fra jeres eget projekt - har du svaret på det spørgsmål.

Hvornår har du brug for det?

  • Ja: flere ændringer, der kun giver mening sammen. Ordre plus ordrelinjer. Overførsel. Sletning på tværs af tabeller.
  • Nej: en enkelt INSERT eller UPDATE. Den er allerede atomar i sig selv.

I et førsteårsprojekt er “opret ordre med linjer” næsten altid det ene sted, hvor en transaktion hører hjemme, og det er et rigtig godt eksempel at have med i rapporten.

Kort opsamling

  • En transaktion gør flere ændringer til én.
  • COMMIT gennemfører, ROLLBACK fortryder.
  • ACID: atomar, konsistent, isoleret, holdbar.
  • Hold dem korte, og luk dem altid.

Læs videre

Senest gennemgået .