Atomicitet
Atomicitet i SQL refererer til en af ACID-egenskaberne, som sikrer, at vi anvender transaktioner, når vi forespørger data ved hjælp af SQL.
I konteksten af SQL-databaser garanterer atomicitet, at alle operationer inden for en bestemt logisk enhed gennemføres, eller ingen af dem gør.
Transaktionsbehandling i SQL
Nøglefunktioner
-
Rollback: Hvis nogen del fejler (f.eks. på grund af fejl eller overtrædelse af begrænsninger), rulles hele transaktionen tilbage, og ændringerne annulleres;
-
Commit: Hvis alle operationer lykkes, gennemføres transaktionen, og ændringerne bliver permanente.
Oprettelse af transaktioner i SQL
I SQL betragtes hver individuel sætning som en transaktion.
Dog kan vi manuelt oprette transaktioner, der indeholder mere end én sætning.
Forestil dig et scenarie, hvor vi har to tabeller:
-
tabellen
BankAccounts
, som indeholder følgende kolonner:account_number
(Primary Key),account_holder
ogbalance
; -
UserLogs
-tabellen med kolonnerne:account_number
,action
,timestamp
osv. Kombinationen afaccount_number
ogtimestamp
er en sammensat primærnøgle for denne relation.
Lad os nu overveje et scenarie, hvor vi har til hensigt at oprette en ny bankkonto og samtidig generere en logpost for at angive tilføjelsen af den nye konto.
Det er afgørende, at disse to handlinger, tilføjelse af kontoen og logning af hændelsen, behandles som en enkelt logisk enhed og skal indkapsles i én transaktion. Her er et meget grundlæggende eksempel på, hvordan vi kan gøre dette med en transaktion:
-- 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;
I forespørgslen ovenfor bruger vi BEGIN
-blokken til at angive, at alle følgende udsagn skal betragtes som en enkelt enhed – hvis én af dem ikke udføres, må ingen af udsagnene udføres.
Nøgleordet COMMIT
angiver afslutningen på transaktionsblokken.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
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
Atomicitet
Stryg for at vise menuen
Atomicitet i SQL refererer til en af ACID-egenskaberne, som sikrer, at vi anvender transaktioner, når vi forespørger data ved hjælp af SQL.
I konteksten af SQL-databaser garanterer atomicitet, at alle operationer inden for en bestemt logisk enhed gennemføres, eller ingen af dem gør.
Transaktionsbehandling i SQL
Nøglefunktioner
-
Rollback: Hvis nogen del fejler (f.eks. på grund af fejl eller overtrædelse af begrænsninger), rulles hele transaktionen tilbage, og ændringerne annulleres;
-
Commit: Hvis alle operationer lykkes, gennemføres transaktionen, og ændringerne bliver permanente.
Oprettelse af transaktioner i SQL
I SQL betragtes hver individuel sætning som en transaktion.
Dog kan vi manuelt oprette transaktioner, der indeholder mere end én sætning.
Forestil dig et scenarie, hvor vi har to tabeller:
-
tabellen
BankAccounts
, som indeholder følgende kolonner:account_number
(Primary Key),account_holder
ogbalance
; -
UserLogs
-tabellen med kolonnerne:account_number
,action
,timestamp
osv. Kombinationen afaccount_number
ogtimestamp
er en sammensat primærnøgle for denne relation.
Lad os nu overveje et scenarie, hvor vi har til hensigt at oprette en ny bankkonto og samtidig generere en logpost for at angive tilføjelsen af den nye konto.
Det er afgørende, at disse to handlinger, tilføjelse af kontoen og logning af hændelsen, behandles som en enkelt logisk enhed og skal indkapsles i én transaktion. Her er et meget grundlæggende eksempel på, hvordan vi kan gøre dette med en transaktion:
-- 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;
I forespørgslen ovenfor bruger vi BEGIN
-blokken til at angive, at alle følgende udsagn skal betragtes som en enkelt enhed – hvis én af dem ikke udføres, må ingen af udsagnene udføres.
Nøgleordet COMMIT
angiver afslutningen på transaktionsblokken.
Tak for dine kommentarer!