Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Isolering | Acid
Quizzes & Challenges
Quizzes
Challenges
/
SQL-optimering och Frågefunktioner

bookIsolering

I databassammanhang avser isolation (isolering) databassystemets förmåga att kontrollera synligheten av ändringar som görs av samtidiga transaktioner. Det säkerställer att transaktioner fungerar oberoende av varandra, vilket förhindrar 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 (committed). Denna nivå tillåter dirty reads, vilket innebär att en transaktion kan läsa data som har ändrats av en annan transaktion men ännu inte har bekräftats.

Dirty reads

Implementation

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 icke-committade transaktioner;

  • detta kommando måste användas endast inom transaktionsblocket! Annars får det ingen effekt och standardnivån för isolering 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 icke-committade ändringar som gjorts av andra transaktioner inte är synliga för transaktioner som körs under Read Committed-isolering.
Som ett resultat förhindras dirty reads genom att en transaktion endast kan läsa committad data. Dock har denna transaktionsnivå problem med non-repeatable reads.

Non-repeatable reads

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 isoleringsnivån read committed – 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å specificera 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:

Can you explain the other isolation levels like Repeatable Read and Serializable?

What are the main differences between dirty reads, non-repeatable reads, and lost updates?

Can you provide examples of when to use each isolation level?

Awesome!

Completion rate improved to 4.55

bookIsolering

Svep för att visa menyn

I databassammanhang avser isolation (isolering) databassystemets förmåga att kontrollera synligheten av ändringar som görs av samtidiga transaktioner. Det säkerställer att transaktioner fungerar oberoende av varandra, vilket förhindrar 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 (committed). Denna nivå tillåter dirty reads, vilket innebär att en transaktion kan läsa data som har ändrats av en annan transaktion men ännu inte har bekräftats.

Dirty reads

Implementation

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 icke-committade transaktioner;

  • detta kommando måste användas endast inom transaktionsblocket! Annars får det ingen effekt och standardnivån för isolering 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 icke-committade ändringar som gjorts av andra transaktioner inte är synliga för transaktioner som körs under Read Committed-isolering.
Som ett resultat förhindras dirty reads genom att en transaktion endast kan läsa committad data. Dock har denna transaktionsnivå problem med non-repeatable reads.

Non-repeatable reads

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 isoleringsnivån read committed – 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å specificera 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