Атомарність
Атомарність у SQL стосується однієї з властивостей ACID, яка гарантує використання транзакцій під час виконання запитів до даних за допомогою SQL.
У контексті SQL-баз даних атомарність гарантує, що всі операції в межах певної логічної одиниці виконуються повністю, або жодна з них не виконується.
Обробка транзакцій у SQL
Основні характеристики
-
Відкат (Rollback): якщо будь-яка частина не виконується (наприклад, через помилку або порушення обмеження), вся транзакція скасовується, а зміни повертаються до попереднього стану;
-
Фіксація (Commit): якщо всі операції виконані успішно, транзакція фіксується, і зміни стають постійними.
Створення транзакцій у SQL
У SQL кожен окремий оператор розглядається як транзакція.
Однак можна вручну створювати транзакції, що містять більше одного оператора.
Уявімо ситуацію, коли маємо дві таблиці:
-
таблиця
BankAccounts, яка містить такі стовпці:account_number(Primary Key),account_holderтаbalance; -
таблиця
UserLogsзі стовпцями:account_number,action,timestampтощо. Комбінаціяaccount_numberтаtimestampє складовим первинним ключем цього відношення.
У наступних прикладах коду буде показано, як дані вставляються та обробляються в цих таблицях, демонструючи атомарні операції з використанням реальних записів із наданої схеми.
12SELECT * FROM BankAccounts;
12SELECT * FROM UserLogs;
Тепер розглянемо сценарій, у якому необхідно створити новий банківський рахунок та одночасно згенерувати запис у журналі для фіксації додавання нового рахунку.
Важливо, щоб ці дві дії — додавання рахунку та фіксація події — розглядалися як єдиний логічний блок і були виконані в межах однієї транзакції. Нижче наведено базовий приклад того, як це можна реалізувати за допомогою транзакції:
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;
У наведеному вище запиті використовується блок BEGIN, щоб позначити, що всі наступні оператори мають розглядатися як єдине ціле — якщо хоча б один з них не буде виконано, жоден з операторів не повинен виконуватися.
Ключове слово COMMIT позначає завершення транзакційного блоку.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
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?
Awesome!
Completion rate improved to 4.55
Атомарність
Свайпніть щоб показати меню
Атомарність у SQL стосується однієї з властивостей ACID, яка гарантує використання транзакцій під час виконання запитів до даних за допомогою SQL.
У контексті SQL-баз даних атомарність гарантує, що всі операції в межах певної логічної одиниці виконуються повністю, або жодна з них не виконується.
Обробка транзакцій у SQL
Основні характеристики
-
Відкат (Rollback): якщо будь-яка частина не виконується (наприклад, через помилку або порушення обмеження), вся транзакція скасовується, а зміни повертаються до попереднього стану;
-
Фіксація (Commit): якщо всі операції виконані успішно, транзакція фіксується, і зміни стають постійними.
Створення транзакцій у SQL
У SQL кожен окремий оператор розглядається як транзакція.
Однак можна вручну створювати транзакції, що містять більше одного оператора.
Уявімо ситуацію, коли маємо дві таблиці:
-
таблиця
BankAccounts, яка містить такі стовпці:account_number(Primary Key),account_holderтаbalance; -
таблиця
UserLogsзі стовпцями:account_number,action,timestampтощо. Комбінаціяaccount_numberтаtimestampє складовим первинним ключем цього відношення.
У наступних прикладах коду буде показано, як дані вставляються та обробляються в цих таблицях, демонструючи атомарні операції з використанням реальних записів із наданої схеми.
12SELECT * FROM BankAccounts;
12SELECT * FROM UserLogs;
Тепер розглянемо сценарій, у якому необхідно створити новий банківський рахунок та одночасно згенерувати запис у журналі для фіксації додавання нового рахунку.
Важливо, щоб ці дві дії — додавання рахунку та фіксація події — розглядалися як єдиний логічний блок і були виконані в межах однієї транзакції. Нижче наведено базовий приклад того, як це можна реалізувати за допомогою транзакції:
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;
У наведеному вище запиті використовується блок BEGIN, щоб позначити, що всі наступні оператори мають розглядатися як єдине ціле — якщо хоча б один з них не буде виконано, жоден з операторів не повинен виконуватися.
Ключове слово COMMIT позначає завершення транзакційного блоку.
Дякуємо за ваш відгук!