Atomiciteit
Atomiciteit in SQL verwijst naar een van de ACID-eigenschappen, die ervoor zorgt dat we transacties gebruiken bij het opvragen van gegevens met SQL.
In de context van SQL-databases garandeert atomiciteit dat alle bewerkingen binnen een bepaalde logische eenheid worden voltooid, of geen van allen.
Transactieafhandeling in SQL
Belangrijkste kenmerken
-
Rollback: Als een deel faalt (bijvoorbeeld door een fout of schending van een beperking), wordt de gehele transactie teruggedraaid en worden wijzigingen ongedaan gemaakt;
-
Commit: Als alle bewerkingen slagen, wordt de transactie vastgelegd en zijn de wijzigingen permanent.
Transacties aanmaken in SQL
In SQL wordt elke individuele instructie beschouwd als een transactie.
We kunnen echter handmatig transacties aanmaken die uit meer dan één instructie bestaan.
Stel je een scenario voor met twee tabellen:
-
de tabel
BankAccounts
, met de volgende kolommen:account_number
(Primary Key),account_holder
enbalance
; -
de tabel
UserLogs
met kolommen:account_number
,action
,timestamp
enzovoort. De combinatie vanaccount_number
entimestamp
vormt de samengestelde primaire sleutel van deze relatie.
Laten we nu een scenario bekijken waarin we een nieuwe bankrekening willen aanmaken en gelijktijdig een logboekvermelding willen genereren om de toevoeging van de nieuwe rekening vast te leggen.
Het is van essentieel belang dat deze twee handelingen, het toevoegen van de rekening en het loggen van het evenement, als één logische eenheid worden behandeld en binnen één transactie worden uitgevoerd. Hier volgt een zeer eenvoudig voorbeeld van hoe we dit met een transactie kunnen doen:
-- 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;
In de bovenstaande query gebruiken we het BEGIN
-blok om aan te geven dat alle volgende instructies als één eenheid moeten worden beschouwd - als één van deze niet wordt uitgevoerd, mag geen van de instructies worden uitgevoerd.
Het sleutelwoord COMMIT
geeft het einde van het transactiegedeelte aan.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
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
Atomiciteit
Veeg om het menu te tonen
Atomiciteit in SQL verwijst naar een van de ACID-eigenschappen, die ervoor zorgt dat we transacties gebruiken bij het opvragen van gegevens met SQL.
In de context van SQL-databases garandeert atomiciteit dat alle bewerkingen binnen een bepaalde logische eenheid worden voltooid, of geen van allen.
Transactieafhandeling in SQL
Belangrijkste kenmerken
-
Rollback: Als een deel faalt (bijvoorbeeld door een fout of schending van een beperking), wordt de gehele transactie teruggedraaid en worden wijzigingen ongedaan gemaakt;
-
Commit: Als alle bewerkingen slagen, wordt de transactie vastgelegd en zijn de wijzigingen permanent.
Transacties aanmaken in SQL
In SQL wordt elke individuele instructie beschouwd als een transactie.
We kunnen echter handmatig transacties aanmaken die uit meer dan één instructie bestaan.
Stel je een scenario voor met twee tabellen:
-
de tabel
BankAccounts
, met de volgende kolommen:account_number
(Primary Key),account_holder
enbalance
; -
de tabel
UserLogs
met kolommen:account_number
,action
,timestamp
enzovoort. De combinatie vanaccount_number
entimestamp
vormt de samengestelde primaire sleutel van deze relatie.
Laten we nu een scenario bekijken waarin we een nieuwe bankrekening willen aanmaken en gelijktijdig een logboekvermelding willen genereren om de toevoeging van de nieuwe rekening vast te leggen.
Het is van essentieel belang dat deze twee handelingen, het toevoegen van de rekening en het loggen van het evenement, als één logische eenheid worden behandeld en binnen één transactie worden uitgevoerd. Hier volgt een zeer eenvoudig voorbeeld van hoe we dit met een transactie kunnen doen:
-- 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;
In de bovenstaande query gebruiken we het BEGIN
-blok om aan te geven dat alle volgende instructies als één eenheid moeten worden beschouwd - als één van deze niet wordt uitgevoerd, mag geen van de instructies worden uitgevoerd.
Het sleutelwoord COMMIT
geeft het einde van het transactiegedeelte aan.
Bedankt voor je feedback!