Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Atomicitet | Acid
Avancerede Teknikker i SQL

bookAtomicitet

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 og balance;

  • UserLogs-tabellen med kolonnerne: account_number, action, timestamp osv. Kombinationen af account_number og timestamp 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.

question mark

Hvad sikrer begrebet atomicitet i forbindelse med databasetransaktioner?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 3

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Suggested prompts:

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

bookAtomicitet

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 og balance;

  • UserLogs-tabellen med kolonnerne: account_number, action, timestamp osv. Kombinationen af account_number og timestamp 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.

question mark

Hvad sikrer begrebet atomicitet i forbindelse med databasetransaktioner?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 3
some-alt