Atomicitet
Atomicitet i SQL refererer til en af ACID-egenskaberne, som sikrer, at vi anvender transaktioner, når vi forespørger data med 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 en del fejler (f.eks. på grund af fejl eller overtrædelse af begrænsninger), rulles hele transaktionen tilbage, og ændringer fortrydes;
-
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_holderogbalance; -
UserLogs-tabellen med kolonner:account_number,action,timestamposv. Kombinationen afaccount_numberogtimestampudgør en sammensat primærnøgle for denne relation.
I de næste kodeeksempler vil du se, hvordan data indsættes og håndteres i disse tabeller, hvilket demonstrerer atomare operationer ved hjælp af reelle poster fra det angivne skema.
12SELECT * FROM BankAccounts;
12SELECT * FROM UserLogs;
Overvej nu et scenarie, hvor der skal oprettes en ny bankkonto og samtidig genereres en logpost for at markere 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 dette kan gøres med en transaktion:
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;
I forespørgslen ovenfor anvendes BEGIN-blokken til at angive, at alle efterfø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 statements in the transaction fails?
How does rollback work in this scenario?
Can you show an example where the transaction fails and is rolled back?
Fantastisk!
Completion rate forbedret til 4.55
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 med 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 en del fejler (f.eks. på grund af fejl eller overtrædelse af begrænsninger), rulles hele transaktionen tilbage, og ændringer fortrydes;
-
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_holderogbalance; -
UserLogs-tabellen med kolonner:account_number,action,timestamposv. Kombinationen afaccount_numberogtimestampudgør en sammensat primærnøgle for denne relation.
I de næste kodeeksempler vil du se, hvordan data indsættes og håndteres i disse tabeller, hvilket demonstrerer atomare operationer ved hjælp af reelle poster fra det angivne skema.
12SELECT * FROM BankAccounts;
12SELECT * FROM UserLogs;
Overvej nu et scenarie, hvor der skal oprettes en ny bankkonto og samtidig genereres en logpost for at markere 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 dette kan gøres med en transaktion:
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;
I forespørgslen ovenfor anvendes BEGIN-blokken til at angive, at alle efterfø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!