Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Атомарність | Acid
Оптимізація SQL та Особливості Запитів

bookАтомарність

Атомарність у 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 є складовим первинним ключем цього відношення.

У наступних прикладах коду буде показано, як дані вставляються та обробляються в цих таблицях, демонструючи атомарні операції з використанням реальних записів із наданої схеми.

12
SELECT * FROM BankAccounts;
copy
12
SELECT * FROM UserLogs;
copy

Тепер розглянемо сценарій, у якому необхідно створити новий банківський рахунок та одночасно згенерувати запис у журналі для фіксації додавання нового рахунку.
Важливо, щоб ці дві дії — додавання рахунку та фіксація події — розглядалися як єдиний логічний блок і були виконані в межах однієї транзакції. Нижче наведено базовий приклад того, як це можна реалізувати за допомогою транзакції:

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;
copy

У наведеному вище запиті використовується блок BEGIN, щоб позначити, що всі наступні оператори мають розглядатися як єдине ціле — якщо хоча б один з них не буде виконано, жоден з операторів не повинен виконуватися.
Ключове слово COMMIT позначає завершення транзакційного блоку.

question mark

Що забезпечує концепція атомарності у контексті транзакцій бази даних?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 3

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Suggested prompts:

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?

bookАтомарність

Свайпніть щоб показати меню

Атомарність у 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 є складовим первинним ключем цього відношення.

У наступних прикладах коду буде показано, як дані вставляються та обробляються в цих таблицях, демонструючи атомарні операції з використанням реальних записів із наданої схеми.

12
SELECT * FROM BankAccounts;
copy
12
SELECT * FROM UserLogs;
copy

Тепер розглянемо сценарій, у якому необхідно створити новий банківський рахунок та одночасно згенерувати запис у журналі для фіксації додавання нового рахунку.
Важливо, щоб ці дві дії — додавання рахунку та фіксація події — розглядалися як єдиний логічний блок і були виконані в межах однієї транзакції. Нижче наведено базовий приклад того, як це можна реалізувати за допомогою транзакції:

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;
copy

У наведеному вище запиті використовується блок BEGIN, щоб позначити, що всі наступні оператори мають розглядатися як єдине ціле — якщо хоча б один з них не буде виконано, жоден з операторів не повинен виконуватися.
Ключове слово COMMIT позначає завершення транзакційного блоку.

question mark

Що забезпечує концепція атомарності у контексті транзакцій бази даних?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 3
some-alt