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

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

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