Atomisitet
Atomisitet i SQL refererer til en av ACID-egenskapene, som sikrer at vi bruker transaksjoner når vi utfører spørringer med SQL.
I konteksten av SQL-databaser garanterer atomisitet at alle operasjoner innenfor en bestemt logisk enhet blir fullført, eller ingen av dem blir det.
Transaksjonsbehandling i SQL
Nøkkelfunksjoner
-
Tilbakerulling: Hvis noen del feiler (for eksempel på grunn av feil eller brudd på begrensninger), blir hele transaksjonen rullet tilbake, og endringer blir reversert;
-
Commit: Hvis alle operasjoner lykkes, blir transaksjonen bekreftet, og endringene blir permanente.
Opprettelse av transaksjoner i SQL
I SQL regnes hver individuell setning som en transaksjon.
Vi kan imidlertid manuelt opprette transaksjoner som inneholder mer enn én setning.
La oss tenke oss et scenario der vi har to tabeller:
-
tabellen
BankAccounts
, som inkluderer følgende kolonner:account_number
(Primary Key),account_holder
ogbalance
; -
UserLogs
-tabellen med kolonner:account_number
,action
,timestamp
osv. Kombinasjonen avaccount_number
ogtimestamp
er en sammensatt primærnøkkel for denne relasjonen.
La oss nå vurdere et scenario der vi har til hensikt å opprette en ny bankkonto og samtidig generere en loggoppføring for å markere at den nye kontoen er lagt til.
Det er avgjørende at disse to handlingene, å legge til kontoen og loggføre hendelsen, behandles som én logisk enhet og må pakkes inn i én enkelt transaksjon. Her er et svært grunnleggende eksempel på hvordan dette kan gjøres med en transaksjon:
-- 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 spørringen ovenfor bruker vi BEGIN
-blokken for å angi at alle påfølgende setninger må betraktes som én enhet – hvis én av dem ikke blir utført, skal ingen av setningene utføres.
Nøkkelordet COMMIT
markerer slutten på transaksjonsblokken.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
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
Atomisitet
Sveip for å vise menyen
Atomisitet i SQL refererer til en av ACID-egenskapene, som sikrer at vi bruker transaksjoner når vi utfører spørringer med SQL.
I konteksten av SQL-databaser garanterer atomisitet at alle operasjoner innenfor en bestemt logisk enhet blir fullført, eller ingen av dem blir det.
Transaksjonsbehandling i SQL
Nøkkelfunksjoner
-
Tilbakerulling: Hvis noen del feiler (for eksempel på grunn av feil eller brudd på begrensninger), blir hele transaksjonen rullet tilbake, og endringer blir reversert;
-
Commit: Hvis alle operasjoner lykkes, blir transaksjonen bekreftet, og endringene blir permanente.
Opprettelse av transaksjoner i SQL
I SQL regnes hver individuell setning som en transaksjon.
Vi kan imidlertid manuelt opprette transaksjoner som inneholder mer enn én setning.
La oss tenke oss et scenario der vi har to tabeller:
-
tabellen
BankAccounts
, som inkluderer følgende kolonner:account_number
(Primary Key),account_holder
ogbalance
; -
UserLogs
-tabellen med kolonner:account_number
,action
,timestamp
osv. Kombinasjonen avaccount_number
ogtimestamp
er en sammensatt primærnøkkel for denne relasjonen.
La oss nå vurdere et scenario der vi har til hensikt å opprette en ny bankkonto og samtidig generere en loggoppføring for å markere at den nye kontoen er lagt til.
Det er avgjørende at disse to handlingene, å legge til kontoen og loggføre hendelsen, behandles som én logisk enhet og må pakkes inn i én enkelt transaksjon. Her er et svært grunnleggende eksempel på hvordan dette kan gjøres med en transaksjon:
-- 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 spørringen ovenfor bruker vi BEGIN
-blokken for å angi at alle påfølgende setninger må betraktes som én enhet – hvis én av dem ikke blir utført, skal ingen av setningene utføres.
Nøkkelordet COMMIT
markerer slutten på transaksjonsblokken.
Takk for tilbakemeldingene dine!