logo

ТРАНЗАКЦІЇ SQL

SQL-транзакція — це послідовність однієї або кількох операцій SQL (наприклад,INSERT UPDATE DELETE) виконується як єдина робота. Трансакції гарантують, що або всі операції будуть успішними, або жодна не буде застосована, зберігаючи цілісність даних.

Ключові властивості транзакцій SQL: ACID

Цілісність транзакцій SQL регулюється властивостями ACID, які гарантують надійні транзакції бази даних. Ці чотири властивості працюють разом, щоб гарантувати, що база даних залишається узгодженою та надійною.

  • Атомарність: Результат транзакції може бути як повністю успішним, так і повністю невдалим. Усю транзакцію потрібно відкотити, якщо одна її частина виходить з ладу.
  • Консистенція: Транзакції зберігають обмеження цілісності шляхом переміщення бази даних з одного дійсного стану в інший.
  • Ізоляція: Одночасні транзакції ізольовані одна від одної, що забезпечує точність даних.
  • Довговічність: Після завершення транзакції її зміни залишаються в силі навіть у разі збою системи.

Команди керування транзакціями SQL

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



1. Команда ПОЧАТИ ТРАНЗАКЦІЮ

TheBEGIN TRANSACTIONкоманда позначає початок нової транзакції. Усі оператори SQL, які слідують за цією командою, будуть частиною однієї транзакції, доки aCOMMIT або ROLLBACK зустрічається. Ця команда не вносить жодних змін у базу даних, а лише запускає транзакцію.

Синтаксис:

BEGIN TRANSACTION transaction_name ;

Приклад транзакції SQL зі сценарієм банківського переказу

Давайте розглянемо приклад банківського переказу між двома рахунками. Цей приклад демонструє використання кількох запитів в одній транзакції.

hashmap java
BEGIN TRANSACTION;  

-- Deduct 0 from Account A
UPDATE Accounts
SET Balance = Balance - 150
WHERE AccountID = 'A';

-- Add 0 to Account B
UPDATE Accounts
SET Balance = Balance + 150
WHERE AccountID = 'B';

-- Commit the transaction if both operations succeed
COMMIT;

Якщо виникає будь-яка помилка, наприклад проблема зUPDATEзапит, який можна використатиROLLBACKщоб скасувати всі зміни, зроблені під час транзакції:

ROLLBACK;

Це гарантує, що система не опиниться в такому неузгодженому стані, як-от списання грошей з одного рахунку без додавання їх на інший.

BEGIN TRANSACTION TransferFunds;

2. Команда COMMIT

TheCOMMITКоманда використовується для збереження в базі даних усіх змін, зроблених під час поточної транзакції. Після здійснення транзакції зміни стають постійними. 

Синтаксис:

COMMIT;

приклад

Ось зразокStudentтаблицю, яка буде використовуватися для виконання операцій у цьому прикладі. Ця таблиця містить основні відомості про студента, такі як ідентифікаційне ім’я, вік та іншу відповідну інформацію, якою можна буде маніпулювати за допомогою різних команди керування транзакціями.

вихід' title=Студентський стіл

Нижче наведено приклад, у якому можна видалити ті записи з таблиці, які мають вік = 20, а потім COMMIT зміни в базі даних. 

DELETE FROM Student WHERE AGE = 20;  
COMMIT;

Вихід

вихід' loading='lazy' title=вихід

3. Команда ROLLBACK

TheROLLBACKКоманда використовується для скасування всіх змін, зроблених у поточній транзакції. Він використовується, коли виникає помилка або коли бажані зміни не можуть бути завершені. База даних повернеться до стану, у якому вона була до BEGIN TRANSACTION було виконано.

Синтаксис:

ROLLBACK;

приклад

Видаліть із таблиці ті записи, які мають вік = 20, а потім відкотіть зміни в базі даних. У цьому випадку DELETE операція скасовується, а зміни в базі даних не зберігаються.

DELETE FROM Student WHERE AGE = 20;  
ROLLBACK;

Вихід:

вихід' loading='lazy' title=вихід

4. Команда SAVEPOINT

АSAVEPOINTвикористовується для створення a КПП в рамках транзакції. Ми можемо повернутися до конкретногоSAVEPOINTзамість відкату всієї транзакції. Це дозволяє нам скасувати частину транзакції, а не всю операцію.

Синтаксис:

SAVEPOINT SAVEPOINT_NAME;

приклад

SAVEPOINT SP1;  
//Savepoint created.
DELETE FROM Student WHERE AGE = 20;
//deleted
SAVEPOINT SP2;
//Savepoint created.

Вихід:

вихід' loading='lazy' title=вихід

Пояснення:

З наведеного вище прикладу. Зразок таблиці 1 Видаліть ті записи з таблиці, які мають вік = 20, а потім відкотіть зміни в базі даних, зберігаючи точки збереження. Тут SP1 — це перша ТОЧКА ЗБЕРЕЖЕННЯ, створена перед видаленням. У цьому прикладі відбулося одне видалення. Після видалення знову створюється SAVEPOINT SP2. 

5. ВІДКОТ ДО ТОЧКИ ЗБЕРЕЖЕННЯ

TheROLLBACK TO SAVEPOINTКоманда дозволяє нам відкотити транзакцію до певної точки збереження, фактично скасовуючи зміни, зроблені після цієї точки.

Синтаксис:

ROLLBACK TO SAVEPOINT SAVEPOINT_NAME;

приклад

Видалення відбулося, припустімо, що ми передумали та вирішили ВІДКОТИТИСЯ до ТОЧКИ ЗБЕРЕЖЕННЯ, яку ми визначили як SP1, яка перед видаленням. Тож у цьому випадкуDELETEоперація скасовується, і транзакція повертається до стану, в якому вона була на моментSP1точка збереження.

ROLLBACK TO SP1;  
//Rollback completed

Вихід:

вихід' loading='lazy' title=вихід

6. Команда RELEASE SAVEPOINT

Ця команда використовується для видалення ТОЧКИ ЗБЕРЕЖЕННЯ, яку ми створили. Після того, як SAVEPOINT було випущено, ми більше не можемо використовувати ROLLBACK команда для скасування транзакцій, виконаних після останньої ТОЧКИ ЗБЕРЕЖЕННЯ. Він використовується для ініціювання транзакції бази даних і для визначення характеристик наступної транзакції. 

Синтаксис:  

RELEASE SAVEPOINT SAVEPOINT_NAME;

приклад

Після точки збереженняSP2випущено, ми більше не можемо повернутися до нього.

RELEASE SAVEPOINT SP2; -- Release the second savepoint.

Навіщо використовувати транзакції в банківській справі?

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

Типи транзакцій SQL

Існують різні типи транзакцій залежно від їх природи та конкретних операцій, які вони виконують:

конструктор на java
  • Читати транзакції : Використовується лише для читання даних, як правило, з SELECT запити.
  • Запис транзакцій : вони передбачають зміну даних у базі даних за допомогою INSERT UPDATEабоDELETEоперації.
  • Розподілені транзакції : ці транзакції охоплюють кілька баз даних і забезпечують узгодженість між ними.
  • Неявні транзакції : Автоматично запускається SQL Server для певних операцій.
  • Явні транзакції : транзакції, керовані вручну, коли користувач починає та завершує транзакцію за допомогоюBEGIN TRANSACTION COMMITіROLLBACK.

Моніторинг і оптимізація транзакцій SQL

Щоб зберегти продуктивність і запобігти проблемам, розгляньте такі методи:

метод перемикання java

1. Блокування монітора : відстежуйте поведінку блокування та коригуйте запити, щоб мінімізувати конфлікти блокування.

2. Обмеження обсягу транзакції : обмежте кількість рядків або записів, на які впливає транзакція, щоб пришвидшити обробку.

3. Використовуйте пакетну обробку : якщо ви обробляєте великі обсяги даних, розбийте операції на менші транзакції або пакети, щоб уникнути перевантаження системи.

Запропонована вікторина Редагувати вікторину 5 Питань

Який із наведених нижче сценаріїв найкраще описує порушення властивості «Ізоляція» в ACID?

  • А

    Транзакція залишає базу даних у стані, який порушує обмеження первинного ключа.

  • Б

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

  • C

    Користувач успішно оновлює запис, але збій системи стирає зміни.

  • Д

    Транзакція завершується невдало на півдорозі, і всі її зміни скасовуються.

Пояснення:

Це класичний приклад порушення ізоляції, коли проміжний стан однієї транзакції видно іншій.

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

  • А

    Ізоляція

  • Б

    Атомарність

  • C

    Довговічність

  • Д

    Послідовність

Пояснення:

Атомарність гарантує успішне виконання всіх операцій у транзакції; інакше вся транзакція відкочується.

Транзакція виконується та видається «КОМІТ». Одразу після збою живлення. Яка властивість ACID гарантує, що зміни, внесені транзакцією, залишаться присутніми після перезапуску системи?

  • А

    Послідовність

  • Б

    Атомарність

  • C

    Довговічність

  • Д

    Ізоляція

Пояснення:

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

Яке основне призначення команди "SAVEPOINT" у транзакції?

  • А

    Здійснити частину угоди.

    linux редагувати файл
  • Б

    Щоб позначити точку в транзакції, до якої можна пізніше повернутися.

  • C

    Для постійного збереження стану транзакції.

  • Д

    Щоб завершити транзакцію та зробити всі зміни постійними.

Пояснення:

'SAVEPOINT' дозволяє частково відкочувати транзакцію.

Розглянемо наступну транзакцію: 'START TRANSACTION; ВСТАВИТИ ...; ТОЧКА ЗБЕРЕЖЕННЯ A; ОНОВИТИ ...; ТОЧКА ЗБЕРЕЖЕННЯ B; ВИДАЛИТИ ...; ВІДКОТИТИСЯ ДО ТОЧКИ ЗБЕРЕЖЕННЯ A;' Який стан транзакції після команди ROLLBACK?

  • А

    Вся транзакція відкочується.

  • Б

    Скасовано лише «ВИДАЛИТИ».

  • C

    Сталася помилка, оскільки ви не можете повернутися до точки збереження, яка не є останньою.

  • Д

    «INSERT» збережено, але «UPDATE» і «DELETE» скасовано.

Пояснення:

Повернення до «ТОЧКИ ЗБЕРЕЖЕННЯ A» скасовує всі зміни, зроблені після цієї точки збереження, а саме «ОНОВЛЕННЯ» та «ВИДАЛЕННЯ».

ТРАНЗАКЦІЇ SQLВікторина виконана успішно. Ваш результат:  2/5Точність: 0%Увійдіть, щоб переглянути пояснення 1/5 1/5 < Previous Далі >