Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Isolamento. Livelli Read Committed e Uncommitted | Acid
Tecniche Avanzate in SQL

bookIsolamento. Livelli Read Committed e Uncommitted

Nel contesto dei database, isolamento si riferisce alla capacità di un sistema di database di controllare la visibilità delle modifiche apportate da transazioni concorrenti. Garantisce che le transazioni operino in modo indipendente l'una dall'altra, evitando interferenze e mantenendo l'integrità dei dati.

Esistono 4 livelli di isolamento in SQL:

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

Read uncommitted

Questo è il livello di isolamento più basso, in cui le transazioni possono vedere le modifiche apportate da altre transazioni anche prima che vengano confermate. Questo livello consente letture sporche, ovvero una transazione può leggere dati che sono stati modificati da un'altra transazione ma non ancora confermati.

Letture sporche

Implementazione

Per specificare il livello di isolamento per la transazione è possibile utilizzare il seguente comando nella query:

-- 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;: Questa istruzione modifica il livello di isolamento per la transazione corrente a "Read Uncommitted", consentendo alla transazione di leggere potenzialmente dati modificati da altre transazioni non ancora confermate;

  • questo comando deve essere utilizzato solo all'interno del blocco di transazione! Altrimenti, non avrà alcun effetto e verrà utilizzato il livello di isolamento predefinito.

È inoltre possibile verificare il livello di isolamento corrente utilizzando il seguente comando:
SHOW TRANSACTION ISOLATION LEVEL;

Read committed

Il livello di isolamento Read Committed garantisce che una transazione veda solo i dati che sono stati confermati da altre transazioni.
Ciò significa che le modifiche non confermate apportate da altre transazioni non sono visibili alle transazioni che operano con isolamento Read Committed.
Di conseguenza, impedisce le letture sporche consentendo a una transazione di leggere solo dati confermati. Tuttavia, questo livello di transazione presenta problemi con le letture non ripetibili.

Letture non ripetibili

Il livello di isolamento "Read committed" consente letture non ripetibili perché blocca l'operazione di lettura sui valori che si trovano in transazioni non ancora confermate, ma non blocca l'operazione di scrittura.
Di conseguenza, è possibile scrivere nuovi dati sulla riga che è attualmente letta da un'altra transazione.

Aggiornamento perso

A causa dell'assenza del blocco in scrittura, esiste un ulteriore problema con il livello di isolamento read committed: gli aggiornamenti persi.

Gli aggiornamenti persi si verificano quando due transazioni parallele tentano di modificare la stessa riga. Di conseguenza, la transazione che viene confermata per ultima sovrascrive i valori confermati dalle altre transazioni.

Implementazione

Possiamo anche specificare questo livello di isolamento utilizzando i seguenti comandi:

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

/* Transaction query */
COMMIT;

È importante notare che Read Committed è il livello di isolamento predefinito per la maggior parte dei sistemi di gestione di database, motivo per cui possiamo evitare di specificarlo.

question mark

Se una transazione legge dati che sono stati modificati da un'altra transazione non ancora confermata, che tipo di lettura è?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 6

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Awesome!

Completion rate improved to 4.35

bookIsolamento. Livelli Read Committed e Uncommitted

Scorri per mostrare il menu

Nel contesto dei database, isolamento si riferisce alla capacità di un sistema di database di controllare la visibilità delle modifiche apportate da transazioni concorrenti. Garantisce che le transazioni operino in modo indipendente l'una dall'altra, evitando interferenze e mantenendo l'integrità dei dati.

Esistono 4 livelli di isolamento in SQL:

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

Read uncommitted

Questo è il livello di isolamento più basso, in cui le transazioni possono vedere le modifiche apportate da altre transazioni anche prima che vengano confermate. Questo livello consente letture sporche, ovvero una transazione può leggere dati che sono stati modificati da un'altra transazione ma non ancora confermati.

Letture sporche

Implementazione

Per specificare il livello di isolamento per la transazione è possibile utilizzare il seguente comando nella query:

-- 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;: Questa istruzione modifica il livello di isolamento per la transazione corrente a "Read Uncommitted", consentendo alla transazione di leggere potenzialmente dati modificati da altre transazioni non ancora confermate;

  • questo comando deve essere utilizzato solo all'interno del blocco di transazione! Altrimenti, non avrà alcun effetto e verrà utilizzato il livello di isolamento predefinito.

È inoltre possibile verificare il livello di isolamento corrente utilizzando il seguente comando:
SHOW TRANSACTION ISOLATION LEVEL;

Read committed

Il livello di isolamento Read Committed garantisce che una transazione veda solo i dati che sono stati confermati da altre transazioni.
Ciò significa che le modifiche non confermate apportate da altre transazioni non sono visibili alle transazioni che operano con isolamento Read Committed.
Di conseguenza, impedisce le letture sporche consentendo a una transazione di leggere solo dati confermati. Tuttavia, questo livello di transazione presenta problemi con le letture non ripetibili.

Letture non ripetibili

Il livello di isolamento "Read committed" consente letture non ripetibili perché blocca l'operazione di lettura sui valori che si trovano in transazioni non ancora confermate, ma non blocca l'operazione di scrittura.
Di conseguenza, è possibile scrivere nuovi dati sulla riga che è attualmente letta da un'altra transazione.

Aggiornamento perso

A causa dell'assenza del blocco in scrittura, esiste un ulteriore problema con il livello di isolamento read committed: gli aggiornamenti persi.

Gli aggiornamenti persi si verificano quando due transazioni parallele tentano di modificare la stessa riga. Di conseguenza, la transazione che viene confermata per ultima sovrascrive i valori confermati dalle altre transazioni.

Implementazione

Possiamo anche specificare questo livello di isolamento utilizzando i seguenti comandi:

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

/* Transaction query */
COMMIT;

È importante notare che Read Committed è il livello di isolamento predefinito per la maggior parte dei sistemi di gestione di database, motivo per cui possiamo evitare di specificarlo.

question mark

Se una transazione legge dati che sono stati modificati da un'altra transazione non ancora confermata, che tipo di lettura è?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 6
some-alt