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 volledige 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 meer dan één instructie bevatten.
Stel je een scenario voor met twee tabellen:
-
de
BankAccounts-tabel, die de volgende kolommen bevat:account_number(Primary Key),account_holderenbalance; -
UserLogs-tabel met kolommen:account_number,action,timestampenz. De combinatie vanaccount_numberentimestampis een samengestelde primaire sleutel van deze relatie.
In de volgende codevoorbeelden zie je hoe gegevens worden ingevoegd en beheerd in deze tabellen, waarbij atomaire bewerkingen worden gedemonstreerd met echte invoer uit het opgegeven schema.
12SELECT * FROM BankAccounts;
12SELECT * FROM UserLogs;
Beschouw nu een scenario waarin het de bedoeling is om een nieuwe bankrekening aan te maken en gelijktijdig een logboekvermelding te genereren om de toevoeging van de nieuwe rekening aan te geven.
Het is essentieel 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 dit met een transactie kan worden gerealiseerd:
123456789101112131415161718-- 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; -- Check the result SELECT * FROM BankAccounts; SELECT * FROM UserLogs;
In de bovenstaande query gebruiken we het BEGIN-blok om aan te geven dat alle volgende instructies als één geheel 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 transactiebereik 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.
Awesome!
Completion rate improved to 4.55
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 volledige 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 meer dan één instructie bevatten.
Stel je een scenario voor met twee tabellen:
-
de
BankAccounts-tabel, die de volgende kolommen bevat:account_number(Primary Key),account_holderenbalance; -
UserLogs-tabel met kolommen:account_number,action,timestampenz. De combinatie vanaccount_numberentimestampis een samengestelde primaire sleutel van deze relatie.
In de volgende codevoorbeelden zie je hoe gegevens worden ingevoegd en beheerd in deze tabellen, waarbij atomaire bewerkingen worden gedemonstreerd met echte invoer uit het opgegeven schema.
12SELECT * FROM BankAccounts;
12SELECT * FROM UserLogs;
Beschouw nu een scenario waarin het de bedoeling is om een nieuwe bankrekening aan te maken en gelijktijdig een logboekvermelding te genereren om de toevoeging van de nieuwe rekening aan te geven.
Het is essentieel 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 dit met een transactie kan worden gerealiseerd:
123456789101112131415161718-- 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; -- Check the result SELECT * FROM BankAccounts; SELECT * FROM UserLogs;
In de bovenstaande query gebruiken we het BEGIN-blok om aan te geven dat alle volgende instructies als één geheel 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 transactiebereik aan.
Bedankt voor je feedback!