Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Isolation. Lästa och Olästa Nivåer | Acid
Avancerade Tekniker i SQL

bookIsolation. Lästa och Olästa Nivåer

I databassammanhang avser isolering en databashanterares förmåga att kontrollera synligheten av ändringar som görs av samtidiga transaktioner. Det säkerställer att transaktioner fungerar oberoende av varandra, undviker störningar och upprätthåller dataintegritet.

Det finns 4 isoleringsnivåer i SQL:

  • read uncommitted;
  • read committed;
  • repeatable read;
  • serializable.

Read uncommitted

Detta är den lägsta isoleringsnivån där transaktioner kan se ändringar som gjorts av andra transaktioner även innan de har bekräftats. Denna nivå tillåter smutsiga läsningar, vilket innebär att en transaktion kan läsa data som har ändrats av en annan transaktion men ännu inte har bekräftats.

Smutsiga läsningar

Implementering

För att ange isoleringsnivån för en transaktion kan vi använda följande kommando i vår fråga:

-- Start transaction
BEGIN;
-- Set the isolation level for the transaction
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

/* Transaction query */
COMMIT;
  • SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;: Detta kommando ändrar isoleringsnivån för den aktuella transaktionen till "Read Uncommitted", vilket tillåter transaktionen att potentiellt läsa data som har ändrats av andra obekräftade transaktioner;

  • detta kommando måste användas endast inom transaktionsblocket! Annars får det ingen effekt och en standardisoleringsnivå kommer att användas.

Vi kan också kontrollera aktuell isoleringsnivå med följande kommando:
SHOW TRANSACTION ISOLATION LEVEL;

Read committed

Isoleringsnivån Read Committed säkerställer att en transaktion endast ser data som har bekräftats av andra transaktioner.
Detta innebär att obekräftade ändringar som gjorts av andra transaktioner inte är synliga för transaktioner som körs under Read Committed-isolering.
Som ett resultat förhindrar det smutsiga läsningar genom att endast tillåta en transaktion att läsa bekräftad data. Dock har denna transaktionsnivå problem med icke-repetitiva läsningar.

Icke-repetitiva läsningar

Isoleringsnivån "Read committed" tillåter icke-repetitiva läsningar eftersom den låser läsoperationen på värden som befinner sig i pågående, ej committade transaktioner men låser inte skrivoperationen.
Som ett resultat kan vi skriva ny data till raden som för närvarande läses av en annan transaktion.

Förlorad uppdatering

På grund av avsaknaden av skrivlås finns det ytterligare ett problem med read committed-isoleringsnivån – förlorade uppdateringar.

Förlorade uppdateringar uppstår när två parallella transaktioner försöker ändra samma rad. Som ett resultat skriver den transaktion som committas sist över de värden som committats av andra transaktioner.

Implementering

Vi kan också ange denna isoleringsnivå med följande kommandon:

-- Start transaction
BEGIN;
-- Set the isolation level for the session
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

/* Transaction query */
COMMIT;

Det är viktigt att notera att Read Committed är standardisoleringsnivån för de flesta databashanteringssystem, vilket gör att vi kan utelämna att specificera den.

question mark

Om en transaktion läser data som har modifierats av en annan icke-committad transaktion, vilken typ av läsning är det?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 6

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Suggested prompts:

What are the other two isolation levels besides Read Uncommitted and Read Committed?

Can you explain what repeatable read and serializable isolation levels are?

How do non-repeatable reads and lost updates affect data consistency?

Awesome!

Completion rate improved to 4.35

bookIsolation. Lästa och Olästa Nivåer

Svep för att visa menyn

I databassammanhang avser isolering en databashanterares förmåga att kontrollera synligheten av ändringar som görs av samtidiga transaktioner. Det säkerställer att transaktioner fungerar oberoende av varandra, undviker störningar och upprätthåller dataintegritet.

Det finns 4 isoleringsnivåer i SQL:

  • read uncommitted;
  • read committed;
  • repeatable read;
  • serializable.

Read uncommitted

Detta är den lägsta isoleringsnivån där transaktioner kan se ändringar som gjorts av andra transaktioner även innan de har bekräftats. Denna nivå tillåter smutsiga läsningar, vilket innebär att en transaktion kan läsa data som har ändrats av en annan transaktion men ännu inte har bekräftats.

Smutsiga läsningar

Implementering

För att ange isoleringsnivån för en transaktion kan vi använda följande kommando i vår fråga:

-- Start transaction
BEGIN;
-- Set the isolation level for the transaction
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

/* Transaction query */
COMMIT;
  • SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;: Detta kommando ändrar isoleringsnivån för den aktuella transaktionen till "Read Uncommitted", vilket tillåter transaktionen att potentiellt läsa data som har ändrats av andra obekräftade transaktioner;

  • detta kommando måste användas endast inom transaktionsblocket! Annars får det ingen effekt och en standardisoleringsnivå kommer att användas.

Vi kan också kontrollera aktuell isoleringsnivå med följande kommando:
SHOW TRANSACTION ISOLATION LEVEL;

Read committed

Isoleringsnivån Read Committed säkerställer att en transaktion endast ser data som har bekräftats av andra transaktioner.
Detta innebär att obekräftade ändringar som gjorts av andra transaktioner inte är synliga för transaktioner som körs under Read Committed-isolering.
Som ett resultat förhindrar det smutsiga läsningar genom att endast tillåta en transaktion att läsa bekräftad data. Dock har denna transaktionsnivå problem med icke-repetitiva läsningar.

Icke-repetitiva läsningar

Isoleringsnivån "Read committed" tillåter icke-repetitiva läsningar eftersom den låser läsoperationen på värden som befinner sig i pågående, ej committade transaktioner men låser inte skrivoperationen.
Som ett resultat kan vi skriva ny data till raden som för närvarande läses av en annan transaktion.

Förlorad uppdatering

På grund av avsaknaden av skrivlås finns det ytterligare ett problem med read committed-isoleringsnivån – förlorade uppdateringar.

Förlorade uppdateringar uppstår när två parallella transaktioner försöker ändra samma rad. Som ett resultat skriver den transaktion som committas sist över de värden som committats av andra transaktioner.

Implementering

Vi kan också ange denna isoleringsnivå med följande kommandon:

-- Start transaction
BEGIN;
-- Set the isolation level for the session
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

/* Transaction query */
COMMIT;

Det är viktigt att notera att Read Committed är standardisoleringsnivån för de flesta databashanteringssystem, vilket gör att vi kan utelämna att specificera den.

question mark

Om en transaktion läser data som har modifierats av en annan icke-committad transaktion, vilken typ av läsning är det?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 6
some-alt