Atomitet
Atomicitet i SQL avser en av ACID-egenskaperna, vilket säkerställer att vi använder transaktioner vid frågeställning av data med SQL.
I sammanhanget av SQL-databaser garanterar atomicitet att alla operationer inom en viss logisk enhet slutförs, eller ingen av dem gör det.
Transaktionshantering i SQL
Viktiga egenskaper
-
Återställning (Rollback): Om någon del misslyckas (t.ex. på grund av fel eller begränsningsöverträdelse) återställs hela transaktionen, vilket återgår ändringarna;
-
Bekräftelse (Commit): om alla operationer lyckas, bekräftas transaktionen och ändringarna blir permanenta.
Skapa transaktioner i SQL
I SQL betraktas varje enskilt kommando som en transaktion.
Vi kan dock manuellt skapa transaktioner som innehåller fler än ett kommando.
Föreställ dig ett scenario där vi har två tabeller:
-
tabellen
BankAccounts, som innehåller följande kolumner:account_number(Primary Key),account_holderochbalance; -
UserLogs-tabellen med kolumner:account_number,action,timestampetc. Kombinationen avaccount_numberochtimestampär en sammansatt primärnyckel för denna relation.
I de kommande kodexemplen kommer du att se hur data infogas och hanteras i dessa tabeller, vilket demonstrerar atomära operationer med verkliga poster från det angivna schemat.
12SELECT * FROM BankAccounts;
12SELECT * FROM UserLogs;
Nu övervägs ett scenario där en nytt bankkonto ska skapas och samtidigt genereras en loggpost för att indikera tillägget av det nya kontot.
Det är avgörande att dessa två åtgärder, att lägga till kontot och logga händelsen, behandlas som en enda logisk enhet och måste omslutas i en enda transaktion. Här är ett mycket grundläggande exempel på hur detta kan göras 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 frågan ovan använder vi BEGIN-blocket för att ange att alla efterföljande satser måste betraktas som en enhet – om en av dem inte utförs, får ingen av satserna utföras.
Nyckelordet COMMIT markerar slutet på transaktionsblocket.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Fantastiskt!
Completion betyg förbättrat till 4.55
Atomitet
Svep för att visa menyn
Atomicitet i SQL avser en av ACID-egenskaperna, vilket säkerställer att vi använder transaktioner vid frågeställning av data med SQL.
I sammanhanget av SQL-databaser garanterar atomicitet att alla operationer inom en viss logisk enhet slutförs, eller ingen av dem gör det.
Transaktionshantering i SQL
Viktiga egenskaper
-
Återställning (Rollback): Om någon del misslyckas (t.ex. på grund av fel eller begränsningsöverträdelse) återställs hela transaktionen, vilket återgår ändringarna;
-
Bekräftelse (Commit): om alla operationer lyckas, bekräftas transaktionen och ändringarna blir permanenta.
Skapa transaktioner i SQL
I SQL betraktas varje enskilt kommando som en transaktion.
Vi kan dock manuellt skapa transaktioner som innehåller fler än ett kommando.
Föreställ dig ett scenario där vi har två tabeller:
-
tabellen
BankAccounts, som innehåller följande kolumner:account_number(Primary Key),account_holderochbalance; -
UserLogs-tabellen med kolumner:account_number,action,timestampetc. Kombinationen avaccount_numberochtimestampär en sammansatt primärnyckel för denna relation.
I de kommande kodexemplen kommer du att se hur data infogas och hanteras i dessa tabeller, vilket demonstrerar atomära operationer med verkliga poster från det angivna schemat.
12SELECT * FROM BankAccounts;
12SELECT * FROM UserLogs;
Nu övervägs ett scenario där en nytt bankkonto ska skapas och samtidigt genereras en loggpost för att indikera tillägget av det nya kontot.
Det är avgörande att dessa två åtgärder, att lägga till kontot och logga händelsen, behandlas som en enda logisk enhet och måste omslutas i en enda transaktion. Här är ett mycket grundläggande exempel på hur detta kan göras 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 frågan ovan använder vi BEGIN-blocket för att ange att alla efterföljande satser måste betraktas som en enhet – om en av dem inte utförs, får ingen av satserna utföras.
Nyckelordet COMMIT markerar slutet på transaktionsblocket.
Tack för dina kommentarer!