programmera.net -> db -> normal     för utskrift      info@programmera.net

Transaktioner

1. Vad är en transaktion?
2. ACID

1. Vad är en transaktion?

En transaktion är en operation på en databas som förändrar databasens tillstånd. En transaktion kan innehålla flera SQL-satser t.ex. SELECT, INSERT och DELETE som körs i en speciell ordning. Databashanteraren ska garantera att transaktionen körs enligt ACID (se nedan).

2. ACID

ACID är en förkortning som man ofta talar om när man diskuterar transaktioner. ACID beskriver de krav man vanligtvis ställer på en transaktion. ACID står för:

  • Atomic (atomär): Att en transaktion är atomär betyder att den exekveras som en enhet. Antingen kör hela transaktionen eller ingenting av transaktionen. Om en del av transaktionen misslyckas kommer alla gjorda förändringar att rullas tillbaka (göras ogjorda).
  • Consistent (konsistent): Att en transaktion är konsistent innebär att den inte lämnar databasen i ett halvfärdigt tillstånd när den kört klart. Om t.ex. en rad i en tabell tas bort måste även referenser till den raden tas bort om databasen ska behålla sin konsistens. Under transaktionens gång kan databasen mycket väl vara inkonsistent, men eftersom transaktionen är atomär (allt eller inget) och isolerad (osynlig för övriga transaktioner) är endastt sluttillståndet viktigt.
  • Isolation (isolering): Att en transaktion är isolerad betyder att olika transaktioner inte stör varandra. Varje transaktion ska tro att den arbetar helt själv i databasen. Effekterna av andra transkationers arbeteär osynliga för transaktionen, och effekterna av den egna transaktionens arbete är osynliga för andra transaktioner. Det finns olika nivåer av isolering. En isolationsnivå är att den innevarande transaktionen blockerar alla övriga transaktioner (som påverkar samma data) tills den är färdig. En annan nivå är att vi låter övriga transaktioner starta, men de bara får se databasen som den såg då den senaste transaktionen avslutades.
  • Durable (varaktig): Att en transaktion är varaktig betyder att servern ser till att avslutade transaktioner bevaras, även om databasen går ner. Om vi har oavslutade transaktioner vid en systemkrasch är vi dessutom garanterade att alla spår av dessa transaktionen sopas undan.