Atomicità
Atomicità in SQL si riferisce a una delle proprietà ACID, che garantisce l'utilizzo delle transazioni durante l'interrogazione dei dati tramite SQL.
Nel contesto dei database SQL, l'atomicità assicura che tutte le operazioni all'interno di una specifica unità logica vengano completate, oppure nessuna di esse.
Elaborazione delle transazioni in SQL
Caratteristiche principali
-
Rollback: Se una qualsiasi parte fallisce (ad esempio, a causa di un errore o di una violazione di vincolo), l'intera transazione viene annullata, ripristinando le modifiche;
-
Commit: Se tutte le operazioni hanno successo, la transazione viene confermata, rendendo permanenti le modifiche.
Creazione di transazioni in SQL
In SQL, ogni istruzione individuale è considerata una transazione.
Tuttavia, è possibile creare manualmente transazioni che contengono più di un'istruzione.
Immaginiamo uno scenario in cui abbiamo due tabelle:
-
la tabella
BankAccounts
, che include le seguenti colonne:account_number
(Primary Key),account_holder
ebalance
; -
la tabella
UserLogs
con le colonne:account_number
,action
,timestamp
ecc. La combinazione diaccount_number
etimestamp
costituisce una chiave primaria composta per questa relazione.
Consideriamo ora uno scenario in cui si desidera creare un nuovo conto bancario e contemporaneamente generare una voce di log per segnalare l'aggiunta del nuovo conto.
È fondamentale che queste due azioni, aggiunta del conto e registrazione dell'evento, siano trattate come un'unica unità logica e vengano incluse in un'unica transazione. Ecco un esempio molto semplice di come potremmo realizzare ciò tramite una transazione:
-- Begin the transaction
BEGIN;
-- Insert a new bank account with account number 109, account holder Emma Watson, and initial balance of 0
INSERT INTO BankAccounts (account_number, account_holder, balance)
VALUES (109, 'Emma Watson', 0);
-- Step 2: Add log entry if the account was added
-- Insert a log entry into the UserLogs table indicating that a new account was added with account number 109
INSERT INTO UserLogs (account_number, action)
VALUES (109, 'New account added');
-- Commit the transaction, making the changes permanent
COMMIT;
Nella query sopra, utilizziamo il blocco BEGIN
per indicare che tutte le istruzioni successive devono essere considerate come un'unica unità: se una di esse non viene eseguita, nessuna delle istruzioni deve essere eseguita.
La parola chiave COMMIT
indica la fine del blocco di transazione.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Can you explain what would happen if one of the INSERT statements failed?
How does rollback work in this scenario?
Can you show an example where the transaction fails and is rolled back?
Awesome!
Completion rate improved to 4.35
Atomicità
Scorri per mostrare il menu
Atomicità in SQL si riferisce a una delle proprietà ACID, che garantisce l'utilizzo delle transazioni durante l'interrogazione dei dati tramite SQL.
Nel contesto dei database SQL, l'atomicità assicura che tutte le operazioni all'interno di una specifica unità logica vengano completate, oppure nessuna di esse.
Elaborazione delle transazioni in SQL
Caratteristiche principali
-
Rollback: Se una qualsiasi parte fallisce (ad esempio, a causa di un errore o di una violazione di vincolo), l'intera transazione viene annullata, ripristinando le modifiche;
-
Commit: Se tutte le operazioni hanno successo, la transazione viene confermata, rendendo permanenti le modifiche.
Creazione di transazioni in SQL
In SQL, ogni istruzione individuale è considerata una transazione.
Tuttavia, è possibile creare manualmente transazioni che contengono più di un'istruzione.
Immaginiamo uno scenario in cui abbiamo due tabelle:
-
la tabella
BankAccounts
, che include le seguenti colonne:account_number
(Primary Key),account_holder
ebalance
; -
la tabella
UserLogs
con le colonne:account_number
,action
,timestamp
ecc. La combinazione diaccount_number
etimestamp
costituisce una chiave primaria composta per questa relazione.
Consideriamo ora uno scenario in cui si desidera creare un nuovo conto bancario e contemporaneamente generare una voce di log per segnalare l'aggiunta del nuovo conto.
È fondamentale che queste due azioni, aggiunta del conto e registrazione dell'evento, siano trattate come un'unica unità logica e vengano incluse in un'unica transazione. Ecco un esempio molto semplice di come potremmo realizzare ciò tramite una transazione:
-- Begin the transaction
BEGIN;
-- Insert a new bank account with account number 109, account holder Emma Watson, and initial balance of 0
INSERT INTO BankAccounts (account_number, account_holder, balance)
VALUES (109, 'Emma Watson', 0);
-- Step 2: Add log entry if the account was added
-- Insert a log entry into the UserLogs table indicating that a new account was added with account number 109
INSERT INTO UserLogs (account_number, action)
VALUES (109, 'New account added');
-- Commit the transaction, making the changes permanent
COMMIT;
Nella query sopra, utilizziamo il blocco BEGIN
per indicare che tutte le istruzioni successive devono essere considerate come un'unica unità: se una di esse non viene eseguita, nessuna delle istruzioni deve essere eseguita.
La parola chiave COMMIT
indica la fine del blocco di transazione.
Grazie per i tuoi commenti!